当ruby遇到“包含模块”语句时包括什么?

时间:2010-03-18 09:29:43

标签: ruby mixins

如果我有以下项目结构

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

ruby​​在遇到include语句时会怎么做?它是如何知道我只想包含来自lib.rb的mixin而不是包含A类和B类的整个模块,这是纯粹基于subproject / lib的要求还是我弄错了它是包括整个模块,包括其自身的A类和B类的定义?

1 个答案:

答案 0 :(得分:1)

它包括整个模块。只有一个Subproject模块,您刚刚在a.rbb.rb重新打开了该模块,并为其添加了课程AB。我认为require无论如何都不相关。

顺便说一句,你总是可以在irb

中试一试
>> Subproject::A
=> Subproject::A
>> Subproject::A::A
=> Subproject::A