0

我想要实现的是如下所示,即从扩展模块方法调用基类方法:

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 吗?

4

1 回答 1

1

我认为正确的语法是:

module ChildModule
  def behavior
   super
   puts 'child module behavior'
  end
end
于 2012-07-31T09:22:19.407 回答