我知道我们可以通过eval一个字符串来获得这样的现有变量:
foo = "foo"
bar = "bar"
%w{foo bar}.each do |baz|
puts eval(baz)
end
=> "foo", "bar"
但有可能做相反的事情吗?
%w{foo bar}.each do |baz|
eval(baz) = baz
end
我知道散列可以用于此目的,但哈希对于几个变量来说感觉有点过分。除了创建实例变量之外,还有更好的方法吗?
答案 0 :(得分:0)
你可以使用像这样的实例变量来实现:
%w{foo bar}.each do |baz|
instance_variable_set "@#{baz}", baz
end
puts @foo
puts @bar
看起来你不能用局部变量做到这一点。
答案 1 :(得分:0)
如果我猜对了,你想要一个字符串并将其用作制定者。
%w{foo bar}.each do |baz|
send("#{baz}=", baz)
end
我应该更加关注问题的标题。如果你真的想直接设置变量,那么原始答案是正确的。
%w{foo bar}.each do |baz|
instance_variable_set("@#{baz}", baz)
end