代码之家  ›  专栏  ›  技术社区  ›  Steve Weet

Ruby遇到“include module”语句时包含什么?

  •  0
  • Steve Weet  · 技术社区  · 14 年前

    如果我有以下项目结构

    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而不是包含class A和class B的整个模块,这纯粹是基于子项目/lib的要求,还是我弄错了,它包含了整个模块,包括其内部的class A和b的定义?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Mladen Jablanović    14 年前

    它包括整个模块。只有一个 Subproject 模块,你刚刚重新打开它 a.rb b.rb 和添加的类 A B 为了它。我不认为 require 不管怎么说都是相关的。

    顺便说一句,你可以试一下 irb :

    >> Subproject::A
    => Subproject::A
    >> Subproject::A::A
    => Subproject::A