我想要实现的是如下所示,即从扩展模块方法调用基类方法:
class BaseClass
def behavior
puts 'base class behavior'
end
end
module ChildModule
def behavior
super.behavior
puts 'child module behavior'
end
end
o = BaseClass.new
o.extend ChildModule
o.behavior
它输出如下(使用 ruby 1.9.2p290(2011-07-09 修订版 32553)[x86_64-linux])
base class behavior
t.rb:9:in `behavior': undefined method `behavior' for nil:NilClass (NoMethodError)
from t.rb:16:in `<main>'
我的猜测是我不能使用super
,因为super
模块中不存在。但是它从方法中打印出那行super
,这很奇怪吗?
我如何实现上面想要的?
@davidrac 的回答正在工作,但是更好奇,想知道,我怎样才能获得基类实例的句柄?例如,我将以下方法添加到 BaseClass
def behavior2
puts 'base class behavior2'
end
并在 ChildModule 中覆盖它。现在我可以从 ChildModule 行为调用 BaseModule 的 behavior2 吗?