Я не совсем уверен, что вы спрашиваете. Конечно, переменные класса могут иметь геттеры и сеттеры (и за кулисами вы можете хранить значение любым удобным вам способом). Этот фрагмент помогает что-то осветить?
>> class TestClass
>> def self.var
>> @@var ||= nil
>> end
>> def self.var=(value)
>> @@var = value
>> end
>> end
=> nil
>>
?> TestClass::var
=> nil
>> TestClass::var = 5
=> 5
>> TestClass::var
=> 5
Если вам нравится весь процесс метапрограммирования, вы можете реализовать метод class_attr_accessor, аналогичный методу attr_accessor . Следующее эквивалентно приведенному выше коду.
class Module
def class_attr_accessor(attribute_name)
class_eval <<-CODE
def self.#{attribute_name}
@@#{attribute_name} ||= nil
end
def self.#{attribute_name}=(value)
@@#{attribute_name} = value
end
CODE
end
end
class TestClass
class_attr_accessor :var
end