0
這個問題是最好的概括了一個代碼示例:爲什麼包含模塊的順序在Ruby中有所不同?
module TestOne
module Foo
def foo
42
end
end
module Bar
include Foo
end
class Quux
include Bar
end
end
TestOne::Bar.ancestors # => [TestOne::Bar, TestOne::Foo]
TestOne::Quux.ancestors # => [TestOne::Quux, TestOne::Bar, TestOne::Foo, Object, Kernel]
TestOne::Quux.new.foo # => 42
module TestTwo
class Quux
end
module Bar
end
module Foo
def foo
42
end
end
end
TestTwo::Quux.send :include, TestTwo::Bar
TestTwo::Bar.send :include, TestTwo::Foo
TestTwo::Bar.ancestors # => [TestTwo::Bar, TestTwo::Foo]
TestTwo::Quux.ancestors # => [TestTwo::Quux, TestTwo::Bar, Object, Kernel]
TestTwo::Quux.new.foo # =>
# ~> -:40: undefined method `foo' for #<TestTwo::Quux:0x24054> (NoMethodError)
我認爲,當你有一個模塊(例如Bar
類Foo
內)所有紅寶石店是事實,Foo
包括Bar
。所以,當你在Foo上調用方法時,它會在Bar
中查找該方法。
如果那是真的,在調用TestTwo::Quux.new.foo
的時候,我已經將foo
方法混合到TestTwo::Bar
中,所以它應該可以正常工作?
這真是一個恥辱,因爲在我的真實情況下,第一個包含發生在我的控制之外,我只是試圖將任何東西混合到包括我的目標模塊中。啊,謝謝:) – Gareth 2008-12-03 13:49:00