Existe uma maneira de ter variáveis ??de classe com setter / getter como variáveis ??virtuais?
Pergunta
Eu estou incorporando o Ruby em meu projeto C e deseja carregar vários arquivos que definem uma classe herdada de minha própria classe pai. Cada herdadas necessidades de classe para definir algumas variáveis ??sobre a inicialização e eu não quero ter duas variáveis ??diferentes para Ruby e C.
Existe uma maneira para definir uma variável de classe que tem um próprio setter custom / getter ou esta é uma maneira estúpida de lidar com isso? Talvez seria melhor com um tipo de dados personalizado?
Solução
Eu não sei exatamente o que você está pedindo. Claro variáveis ??de classe pode ter getters e setters (e por trás das cenas que você pode armazenar o valor de qualquer maneira que você quiser). Será que este trecho de ajudar a iluminar alguma coisa?
>> 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
Se você estiver em toda a coisa metaprogramming, você pode implementar um método class_attr_accessor semelhante ao attr_accessor método. O seguinte é equivalente ao código acima.
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