Ruby元编程如何实现动态实例变量名称?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (29)

假设我有以下散列:

{ :foo => 'bar', :baz => 'qux' }

如何动态设置键和值,使其成为对象中的实例变量?

class Example
  def initialize( hash )
    ... magic happens here...
  end
end

我在模型里有下面的内容...

@foo = 'bar'
@baz = 'qux'

提问于
用户回答回答于

instance_variable_set

hash.each { |name, value| instance_variable_set(name, value) }

或者

hash.each &method(:instance_variable_set)

如果你的实例变量名缺少“@”,需要添加

hash.each { |name, value| instance_variable_set("@#{name}", value) }
用户回答回答于
h = { :foo => 'bar', :baz => 'qux' }

o = Struct.new(*h.keys).new(*h.values)

o.baz
 => "qux" 
o.foo
 => "bar" 

扫码关注云+社区