Ruby 1.9.2不允许从定义为多个类的单例方法调用“超级”。
通常最好的解决方案是停止使用单例方法。但是,我们正在重新定义self.inherited,这是语言定义的一部分,所以这是不可能的。
有没有人找到一个好的解决方法?我试过了:
def self.inherited(klass)
# ...
klass.ancestors.each do |kls|
if kls.respond_to?(:inherited) && !kls.include?(MyModuleName)
kls.inherited(klass)
end
end
end
哪个不起作用。
我也尝试过alias_method_chain这个函数,但是也没用。
更多背景信息可在https://hobo.lighthouseapp.com/projects/8324-hobo/tickets/840&& http://github.com/tablatom/hobo,如果我没有提供足够的内容,你也可以提出更多的背景信息。
答案 0 :(得分:2)
Domizio Demichelis找到了答案,这是一个奇怪的答案:
eval %(
def self.inherited(klass)
# ...
klass.ancestors.each do |kls|
if kls.respond_to?(:inherited) && !kls.include?(MyModuleName)
kls.inherited(klass)
end
end
end
)
这是正确的 - 将函数包装在eval中。 eval在函数外部,因此没有额外的运行时间成本。