一千萬個為什麽

搜索

重新包含模塊

我需要這樣的一些:

module One
  def test; puts 'Test One'; end
end

module Two
  def test; puts 'Test Two'; end
end

class Foo
  include One
  include Two
  include One
end

在這種情況下,我需要“Test One”,但很明顯它會返回“Test Two”。我需要一個幹凈簡單的方法來重新包含我的模塊。

有什麽建議嗎?

謝謝!

最佳答案

 class Module
     def include_again(mod)
         mod.instance_methods.each { |m|
             self.send(:define_method, m) { |*args|
                 mod.instance_method(m).bind(self).call(*args)
             }
         }
     end
 end

module One
    def test(a); puts "test one #{a}"; end
end

module Two
    def test; puts "test two"; end
end

class Foo
    include One
    include Two
end

Foo.new.test #=> "test two"

class Foo
    include_again One
end

Foo.new.test(1) #=> "test one 1"

轉載註明原文: 重新包含模塊