Palavras-chave: instance, object, objeto, eval, runtime, variable, variável, atributo
Vamos supor que você deseja criar atributos para o seu objeto no runtime, lendo, por exemplo, as propriedades do objeto em um arquivo. Vamos testar com um hash simulando o arquivo:
class Carro end carro = Carro.new {:cor=>"azul",:modelo=>"Gol",:ano=>1995}.each do |key,value| carro.instance_variable_set("@#{key}",value) carro.instance_eval("def #{key}; @#{key}; end") carro.instance_eval("def #{key}=(v); @#{key}=v; end") end puts carro.inspect
Rodando o programa:
#<Carro:0xb7d5674c @cor="azul", @ano=1995, @modelo="Gol">
Temos o primeiro EVAL do blog!
O TaQ já começou sendo Heavy Trash Metal Core ;)
Como é um instance_eval, não faz estrago. ;-)
Ou, e tem um “h” tem “thrash”, senão fica “lixo”. ;-)
Só dando uma otimizada!
{:cor=>”azul”,:modelo=>”Gol”,:ano=>1995}.each do |key,value|
carro.instance_variable_set(“@#{key}”,value)
carro.instance_eval(“:attr_accessor :#{key}”)
end
Precisei disso agora! ;)