Ruby: Criando atributos no runtime

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">
This entry was posted in Ruby. Bookmark the permalink.

3 Responses to Ruby: Criando atributos no runtime

  1. Temos o primeiro EVAL do blog!

    O TaQ já começou sendo Heavy Trash Metal Core ;)

  2. Como é um instance_eval, não faz estrago. ;-)
    Ou, e tem um “h” tem “thrash”, senão fica “lixo”. ;-)

  3. Nando Vieira says:

    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! ;)

Leave a Reply

Your email address will not be published. Required fields are marked *