2010-03-18 20 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