Создайте переменные модуля в Ruby
Есть ли способ создать переменную в модуле в Ruby, которая будет вести себя подобно переменной класса? Под этим я подразумеваю, что к нему можно будет обращаться без инициализации экземпляра модуля, но его можно изменить (в отличие от констант в модулях).
4 ответа
Ruby изначально поддерживает переменные класса в модулях, поэтому вы можете использовать переменные класса напрямую, а не некоторые прокси-переменные или псевдокласс-переменные:
module T
@@foo = 'bar'
def self.set(x)
@@foo = x
end
def self.get
@@foo
end
end
p T.get #=> 'bar'
T.set('fubar')
p T::get #=> 'fubar'
Если вам не нужно вызывать его из экземпляра, вы можете просто использовать переменную экземпляра в теле модуля.
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
учебный класс.
Вы можете установить переменную экземпляра класса в модуле.
module MyModule
class << self; attr_accessor :var; end
end
MyModule.var = 'this is saved at @var'
MyModule.var
=> "this is saved at @var"
Вы также можете инициализировать значение в определении модуля:
module MyModule
class << self
attr_accessor :my_variable
end
self.my_variable = 2 + 2
end
p MyModule.my_variable