Что такое «база» в модуле Ruby? - PullRequest
1 голос
/ 26 января 2020

С помощью хука

def self.included(base)
end

можно получить доступ к включающему классу из хука included. Насколько я знаю Модули. Но я не передаю base в качестве параметра на крючок? Не означает ли это, что он также должен быть доступен внутри целого Module в качестве некоторой переменной-модуля и существовать в модуле?

Очевидно, что он не определен как переменная класса (Module.class_variables), переменная экземпляра (Module.instance_variables) или константа как выводимая из факта, что это строчные буквы.

Что такое аргумент base, тогда? Разве это только «вызвано в существование», когда вы передаете его в качестве аргумента хуку Module?

@ spickermann

2.6.0 :001 > module ConcernModule
2.6.0 :002?>   extend ActiveSupport::Concern
2.6.0 :003?>   included(base) do
2.6.0 :004 >       puts "base is #{base}"
2.6.0 :005?>     end
2.6.0 :006?>   end


Traceback (most recent call last):
        2: from (irb):1
        1: from (irb):3:in `<module:ConcernModule>'
NameError (undefined local variable or method `base' for ConcernModule:Module)

Спасибо

1 Ответ

1 голос
/ 26 января 2020

Module#included - это обратный вызов , который вызывается из Module#include, явно передавая self в качестве параметра методу.

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