首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用twist调用超类的方法

使用twist调用超类的方法
EN

Stack Overflow用户
提问于 2010-10-20 23:01:33
回答 2查看 407关注 0票数 1

假设我有两个这样的类:

代码语言:javascript
复制
class Parent
  def say
   "I am a parent"
  end
end

class Child < Parent
  def say
   "I am a child"
  end

  def super_say
   #I want to call Parent.new#say method here
  end
end

要做到这一点,有哪些选择?我想到的是:

代码语言:javascript
复制
def super_say
  self.superclass.new.say #obviously the most straight forward way, but inefficient
end

def super_say
 m = self.superclass.instance_method(:say)
 m = m.bind(self)
 m.call
 #this works, but it's quite verbose, is it even idiomatic? 
end

我正在寻找一种方法,它不涉及将Parent.new#say别名为其他东西,这将使它在方法查找链中是唯一的(或者这实际上是首选的方法吗?)。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-21 03:09:44

我倾向于使用别名。(我不太确定我是否理解您的反对意见。)

示例:

代码语言:javascript
复制
class Child < Parent
  alias :super_say :say

  def say
    "I am a child"
  end
end

提供:

代码语言:javascript
复制
irb(main):020:0> c = Child.new
=> #<Child:0x45be40c>
irb(main):021:0> c.super_say
=> "I am a parent"
票数 2
EN

Stack Overflow用户

发布于 2010-10-20 23:45:51

你的第二个解决方案( bind())就是我想要的。它是冗长的,因为您所做的非常不寻常,但如果您确实需要这样做--这个解决方案对我来说似乎很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3979263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档