Создание переменных модуля в Ruby
есть ли способ создать переменную в модуле в Ruby, которая будет вести себя аналогично переменной класса? Я имею в виду, что к нему можно было бы получить доступ без инициализации экземпляра модуля, но его можно изменить (в отличие от констант в модулях).
4 ответа:
Руби поддерживает переменные класса в модулях, так что вы можете использовать переменные класса напрямую, а не какой-то прокси или псевдо-класса-переменные:
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
класса.