Existe uma maneira de ter variáveis ??de classe com setter / getter como variáveis ??virtuais?

StackOverflow https://stackoverflow.com/questions/128718

  •  02-07-2019
  •  | 
  •  

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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top