首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby元编程:动态实例变量名

Ruby元编程:动态实例变量名
EN

Stack Overflow用户
提问于 2011-07-19 10:13:21
回答 4查看 50.5K关注 0票数 98

假设我有以下散列:

代码语言:javascript
复制
{ :foo => 'bar', :baz => 'qux' }

如何将键和值动态设置为对象中的实例变量……

代码语言:javascript
复制
class Example
  def initialize( hash )
    ... magic happens here...
  end
end

..。所以我最终在模型中包含了以下内容……

代码语言:javascript
复制
@foo = 'bar'
@baz = 'qux'
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-19 10:21:05

您要查找的方法是instance_variable_set。所以:

代码语言:javascript
复制
hash.each { |name, value| instance_variable_set(name, value) }

或者,更简单地说,

代码语言:javascript
复制
hash.each &method(:instance_variable_set)

如果您的实例变量名缺少"@“(就像在OP的示例中一样),则需要添加它们,因此更像是:

代码语言:javascript
复制
hash.each { |name, value| instance_variable_set("@#{name}", value) }
票数 177
EN

Stack Overflow用户

发布于 2011-07-19 10:54:49

代码语言:javascript
复制
h = { :foo => 'bar', :baz => 'qux' }

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

o.baz
 => "qux" 
o.foo
 => "bar" 
票数 14
EN

Stack Overflow用户

发布于 2011-07-19 10:20:17

你让我们想哭:)

在任何情况下,请参阅Object#instance_variable_getObject#instance_variable_set

祝你编码愉快。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6741567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档