假设我有以下散列:
{ :foo => 'bar', :baz => 'qux' }
如何将键和值动态设置为对象中的实例变量……
class Example
def initialize( hash )
... magic happens here...
end
end
..。所以我最终在模型中包含了以下内容……
@foo = 'bar'
@baz = 'qux'
发布于 2011-07-19 10:21:05
您要查找的方法是instance_variable_set
。所以:
hash.each { |name, value| instance_variable_set(name, value) }
或者,更简单地说,
hash.each &method(:instance_variable_set)
如果您的实例变量名缺少"@“(就像在OP的示例中一样),则需要添加它们,因此更像是:
hash.each { |name, value| instance_variable_set("@#{name}", value) }
发布于 2011-07-19 10:54:49
h = { :foo => 'bar', :baz => 'qux' }
o = Struct.new(*h.keys).new(*h.values)
o.baz
=> "qux"
o.foo
=> "bar"
发布于 2011-07-19 10:20:17
https://stackoverflow.com/questions/6741567
复制相似问题