ruby 1.9.2的解决方法:不支持从单个方法定义到多个类的超级方法

时间:2010-11-23 22:26:23

标签: ruby-on-rails ruby

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,如果我没有提供足够的内容,你也可以提出更多的背景信息。

1 个答案:

答案 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在函数外部,因此没有额外的运行时间成本。