Есть ли способ создать переменную в модуле в Ruby, который будет вести себя аналогично переменной класса? Я имею в виду, что к нему можно будет получить доступ без инициализации экземпляра модуля, но его можно изменить (в отличие от констант в модулях).
Создание переменных модуля в Ruby
Ответ 1
Ruby изначально поддерживает переменные класса в модулях, поэтому вы можете использовать переменные класса напрямую, а не некоторые прокси-переменные или псевдоклассные переменные:
module Site
@@name = "Qaru"
def self.setName(value)
@@name = value
end
def self.name
@@name
end
end
Site.name # => "Qaru"
Site.setName("Test")
Site.name # => "Test"
Ответ 2
Если вам не нужно вызывать его из экземпляра, вы можете просто использовать переменную экземпляра в теле модуля.
module SomeModule
module_function
def param; @param end
def param= v; @param = v end
end
SomeModule.param
# => nil
SomeModule.param = 1
SomeModule.param
# => 1
Затем переменная экземпляра @param
будет принадлежать модулю SomeModule
, который является экземпляром класса Module
.
Ответ 3
вы можете установить переменную экземпляра класса в модуле.
module MyModule
class << self; attr_accessor :var; end
end
MyModule.var = 'this is saved at @var'
MyModule.var
=> "this is saved at @var"
Ответ 4
Вы также можете инициализировать значение в определении модуля:
module MyModule
class << self
attr_accessor :my_variable
end
self.my_variable = 2 + 2
end
p MyModule.my_variable