1

你好我的问题很简单我有简化的代码看起来像这样

foo = OpenStruct.new
bar = OpenStruct.new

mappings.each do |k,v|
 eval "foo.#{k} = bar.#{v}"
end

我正在尝试修复这种eval用法而不是使用它:) 找出正确的部分,但我不知道如何分配给左边的部分。要访问 getter,您可以编写。

 bar.send(v.to_sym)
 # not to sure how to access setter for foo

我正在使用Ruby 1.8.7,谢谢

4

1 回答 1

5

不确定 1.8.7,但在较新的红宝石中这有效:

foo.send("#{k}=".to_sym, bar.send(v.to_sym))

此外,在较新的版本中,也send接受字符串,因此您可以省略.to_sym.

于 2012-10-11T11:04:52.490 回答