JavaFree.org | RubyOnBr.org

attr_accessor para atributos de classe

Acompanhar attr_accessor para atributos de classe 10 posts, 3 participantes

Avatar Guilherme Ga... 10 posts

É possível criar attr_accessors para atributos de classe? Por exemplo, para atributos de instância, o seguinte código:

é equivalente a:

Mas se para atributos de classe, eu preciso definir o get e set:

É possível substituir o código acima por attr_accessor, de alguma forma?

 
Avatar Shairon Toledo 1413 posts

Cara, var de classe nunca vi. Mas fiz um método que faz isso sem usar method_missing, veja

Vamos usar agora

os métodos foram definidos na class

Atribuindo os valores

o mesmo vale pra bar

resolve?

 
Avatar Guilherme Ga... 10 posts

Perfeito, é exatamente o que eu queria. Obrigado.

PS: alguém sabe dizer por que isso não existe por default no Ruby?

 
Avatar Guilherme Ga... 10 posts

Shairon,

fiz um complemento ao seu código, criando os métodos attr_static_reader e attr_static_writer:

 
Avatar Urubatan 161 posts

por que isto equivale quase a definição de variáveis globais …
e variáveis globais não são uma boa idéia :D

 
Avatar Guilherme Ga... 10 posts

Mais uma dúvida: porque criando os accessors desta forma o valor inicial do atributo não aparece? Ex:

Já se eu definir os métodos manualmente:

 
Avatar Guilherme Ga... 10 posts

Respondendo minha própria dúvida: o valor deve ser definido depois do attr_static_{reader, writer, accessor}.

Só não sei explicar porque…

 
Avatar Urubatan 161 posts

por causa desta linha de código: self.send(:class_variable_set, “@@#{meth}”.to_sym,nil)

 
Avatar Shairon Toledo 1413 posts

só adicionar a condição

 
Avatar Guilherme Ga... 10 posts

Legal Shairon. Valeu mais uma vez pela ajuda.

Fiz um “refactory” do código anterior, acrescentando essa condição: