tnaires
#1
Pessoal,
Quero construir um método que receba um hash e retorne um objeto contendo um acessor para cada chave do hash.
[code]def build(hash)
o = Object.new
hash.each do |k, v|
class << o
attr_accessor k
end
# Inicializando os atributos com o valor correspondente
o.send(k.to_s + '=', v)
end
o
end[/code]O problema é que a variável "k" não é visível na linha 6. Como posso contornar isso sem criar uma variável global?
tnaires
#2
OK pessoal, resolvi dessa forma:
[code]def build(hash)
o = Object.new
def o.metaclass
class << self; self; end
end
hash.each do |k, v|
o.metaclass.instance_eval do
attr_accessor k
end
# Inicializando os atributos com o valor correspondente
o.send(k.to_s + '=', v)
end
o
end[/code]
EDIT - Sem declarar o método "metaclass"
[code]def build(hash)
o = Object.new
hash.each do |k, v|
(class << o; self; end).instance_eval do
attr_accessor k
end
# Inicializando os atributos com o valor correspondente
o.send(k.to_s + '=', v)
end
o
end[/code]