模块如何覆盖包含它的类的父类中的方法?

时间:2010-11-11 17:31:46

标签: ruby

我正在尝试编写一个模块来覆盖它所包含的类中的实例方法。

这不起作用:

require 'active_support'

class Foo
  def bar
    "bar"
  end
end

module NewFoo
  extend ActiveSupport::Concern

  included do
    alias __bar__ bar
  end

  def bar
    "new " + __bar__
  end
end

class Baz < Foo
  include NewFoo
end

我的期望是Baz.new.bar.should eql "new bar",但我得到undefined local variable or method '__bar__'错误。

我尝试了上述的各种变体,包括通过def self.include(base)...的旧方式无效。

任何指针?

1 个答案:

答案 0 :(得分:3)

这是一项名为继承的伟大新发明

module NewFoo
  def bar
    'new ' + super
  end
end

或更具惯用力

"new #{super}"