2010-03-18 22 views
0

如果我有以下項目結構ruby​​在遇到「include module」語句時包含了什麼?

 
project/ 
    lib/ 
    subproject/ 
     a.rb 
     b.rb 
     lib.rb 

其中lib.rb看起來是這樣的: -

module Subproject 
    def foo 
    do_some_stuff 
    end 
end 

和a.rb和b.rb都需要混入lib.rb內的一些方法並且都在一個模塊內的命名空間,如下所示: -

require 'subproject/lib' 

module Subproject 
    class A 
    include Subproject 

    def initialize() 
     foo() 
    end 
    end 
end 

是什麼紅寶石做的,當它遇到包含語句?它是如何知道我只想包含lib.rb中的mixin而不是包含A類和B類的整個模塊,這是純粹基於subproject/lib的要求還是我錯了,它是包括整個模塊,包括A類和B類的定義在內?

回答

1

它包括整個模塊。只有一個Subproject模塊,您剛剛在a.rbb.rb中重新打開它,並向其添加類AB。無論如何,我認爲require與此無關。

順便說一句,你總是可以嘗試一下在irb

>> Subproject::A 
=> Subproject::A 
>> Subproject::A::A 
=> Subproject::A 
+0

所以,如果我只是想包括lib.rb功能,然後我有一個名爲SubprojectLib或類似的模塊來定義它,只是包括? – 2010-03-18 10:53:50

+0

這是正確的。 – 2010-03-18 11:08:24