代码之家  ›  专栏  ›  技术社区  ›  Hakan Ensari

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

  •  0
  • Hakan Ensari  · 技术社区  · 15 年前

    我正试图编写一个模块,覆盖类中包含的实例方法。

    这不起作用:

    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 回复  |  直到 15 年前
        1
  •  3
  •   Jörg W Mittag    15 年前

    有一个伟大的新发明叫做 继承 :

    module NewFoo
      def bar
        'new ' + super
      end
    end
    

    或者更习惯地说

    "new #{super}"
    
    推荐文章