Область применения методов модуля и расширение внутренних классов. - PullRequest
0 голосов
/ 08 мая 2018

Я запустил этот скрипт:

module Ma
  class CLogic; end

  def execute
    "Module Ma executes."
  end
end

include Ma
CLogic.execute # => "Module Ma executes."

Выполняется Ma#execute. Я ожидал что-то вроде Undefined method 'execute' for class A.. Я хочу понять почему. Расширяется ли класс CLogic модулем из-за include?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Включение модуля на верхнем уровне делает его методы экземпляра доступными для всех объектов, а не только для CLogic:

include Ma
123.execute    #=> "Module Ma executes."
:foo.execute   #=> "Module Ma executes."
Array.execute  #=> "Module Ma executes."
CLogic.execute #=> "Module Ma executes."

Это в основном как:

class Object
  include Ma
end
0 голосов
/ 08 мая 2018

Вы определили Ma#execute, который был включен в основную среду. Это приводит определение в Object. Поскольку CLogic является экземпляром Object, CLogic.execute может быть вызвано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...