动态的方式来使用setter和getter

时间:2012-10-11 10:51:08

标签: ruby metaprogramming accessor

您好我的问题很简单我有简化的代码

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 ,谢谢

1 个答案:

答案 0 :(得分:4)

不确定1.8.7,但在较新的Rubies中,这有效:

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

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