Заявление об отказе от ответственности: я знаю, что это очень плохой шаблон, я просто хочу понять, почему у меня следующее поведение и механизмы, лежащие в его основе.
- У нас будет один класс с некоторыми константами / методами
- одна проблема
- один патч обезьяны, который включает эту проблему в мой первый класс
Я поместил все следующее в одну модель рельсов ( в app / modela / a.rb)
class A
MY_CONST = "const"
def self.hello
"world"
end
end
module MyConcern
extend ActiveSupport::Concern
included do
byebug # Here I want to try many things
end
end
class A
include MyConcern
end
Затем я открываю консоль и запускаю следующее, чтобы загрузить свой класс: [1] pry(main) > A
Сначала я мой A
класс загружается, затем модуль MyConcern
, затем патч обезьяны. Когда я вхожу в свой byebug, у меня странное поведение
(byebug) self
A # Important : I'm in the scope of my A class
(byebug) hello
"world" # so far so good, my A class is loaded and have a world class method
(byebug) A::MY_CONST
"const" # Obiously this is working
(byebug) self::MY_CONST
"const" # When I Explicitly access it through `self`, it's also working
(byebug) MY_CONST
*** NameError Exception: uninitialized constant MyConcern::MY_CONST
nil # Here for some reason, and that's what I want to understand, I can't access my const, even if `self == A`
Я хочу 'знать, почему константы не работают одинаково. Почему ruby не может найти эту константу. Моя область действия - это мой класс A
, self == A
, так почему я не могу получить доступ к своей константе?
ps: Rails.version => "6.0.0"