以下eval语句有效
@config = {}
@config['foo'] = 42
variable = "@config['foo']"
eval("#{variable}")
但是,如果我有一个字符串数组,并且尝试对每个字符串求值,则不会返回任何内容。
@config = {}
@config['foo'] = 42
variables = ["@config['foo']", "@config['bar']"]
variables.each do |variable|
eval("#{variable}")
end
答案 0 :(得分:4)
您的第二个示例有效。但是Ruby的工作方式与您想象的不同。
Ruby返回最后一个表达式的值,并以IRB为例输出返回的值。
跑步时
variables.each do |variable|
eval("#{variable}")
end
然后,最后一个表达式的返回值就是each
块的返回值,即variables
本身。
如果您希望看到该块确实起作用,则可能要输出评估结果:
variables.each do |variable|
puts eval("#{variable}")
end
或使用map
代替each
来更改返回值:
variables.map do |variable|
eval("#{variable}")
end
注意:
variable
已经是字符串eval("#{variable}")
可以简化为eval(variable)
eval
非常危险。我建议尽可能避免使用eval
。