Что включает в себя ruby, когда сталкивается с оператором «include module»? - PullRequest
0 голосов
/ 18 марта 2010

Если у меня следующая структура проекта

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, а не весь модуль, который включает в себя как класс A, так и класс B, основано ли это исключительно на требованиях подпроекта / lib или я ошибаюсь, и это включая весь модуль, включая определения классов A и B внутри себя?

1 Ответ

1 голос
/ 18 марта 2010

Включает весь модуль. Существует только один модуль Subproject, вы только что открыли его в a.rb и b.rb и добавили классы A и B. Я не думаю, что require так или иначе связан там.

Кстати, вы всегда можете попробовать это в irb:

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