Я не могу перезаписать переменную модуля переменной класса.
module Main
class Traks
@@endpoint ='/trakings'
class << self
include ViewTrait
end
end
end
Мой модуль черт
module Main
module ViewTrait
def view(id:, options: "")
Response::new("#{@@endpoint}/#{id}#{options}").resource(id: id).get
end
end
end
в ViewTrait я не могу получить доступ к @@endponint, который я уже определил в своем классе Traks. кто-нибудь может позволить мне, что я пошел не так.
@maxpleaner- я пытался, но получаю пустую строку в модуле ViewTrait.
Обратите внимание, что class << self; include ViewTrait; end совпадает с extend ViewTrait. См. Объект#продлить.
@CarySwoveland - проблема заключается в доступе к переменной класса в другой метод модуля.
не @@endpoint в модуле ViewTrait говорит self.@@endpoint и в этом случае не будет ли self модулем ViewTrait? Если вы позвоните правильному получателю, он должен работать?
Да, я знаю. Обычно вызывают include в классе singleton, а не просто используют extend, поэтому я подумал, что вы можете не знать о extend.
В вашем вопросе говорилось «переменная экземпляра класса», но @@endpoint (с двумя знаками «at») — это "переменная класса" (я изменил это соответственно). "переменная класса пример" будет @endpoint (один знак "at") в области действия класса. Вы, скорее всего, все равно захотите последнее (или, может быть, константу), потому что переменные класса имеют проблемы с наследованием.
@Stefan - я исправил. Спасибо, что присоединились к обсуждению. и я понимаю, что вы пытаетесь сказать.
@ManishJ Я только что проверил это, и вы ответили, что делает работает, но то же самое можно сказать и о замене @@ на @ в исходном коде (используя переменную экземпляра уровня класса, а не переменную класса)
Я не уверен точно, почему, но кажется, что переменные класса имеют какое-то странное поведение, когда вам нужно использовать self.class_variable_get в этом случае. Переменные экземпляра уровня класса ведут себя более «нормально», поэтому я советую их, и я думаю, что они работают одинаково для ваших целей.

в ViewTrait я заменил @@endpoint который self.class_variable_get(:@@endpoint) и я могу получить доступ к классу Variable в модуле. надеюсь, что это поможет другим.
Я могу сказать вам, что если вы замените
@@на одинарный@, это сработает.