假设我有两个类似的那样:
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
有什么选择呢?我想到了:
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 to other else,这会使它在方法查找链中独一无二(或者这实际上是首选方式?)。 有什么建议吗?
答案 0 :(得分:2)
我倾向于使用别名。 (我不太确定我理解你的反对意见。)
示例:
class Child < Parent
alias :super_say :say
def say
"I am a child"
end
end
给出:
irb(main):020:0> c = Child.new
=> #<Child:0x45be40c>
irb(main):021:0> c.super_say
=> "I am a parent"
答案 1 :(得分:0)
你的第二个解决方案(bind()
)是我想要的。它是冗长的,因为你正在做的事情是非常不寻常的,但如果你真的需要这样做 - 这个解决方案对我来说似乎很好。