使用 setter 和 getter 的动态方式

Har*_*ina 1 ruby metaprogramming accessor

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

foo = OpenStruct.new
bar = OpenStruct.new

mappings.each do |k,v|
 eval "foo.#{k} = bar.#{v}"
end
Run Code Online (Sandbox Code Playgroud)

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

 bar.send(v.to_sym)
 # not to sure how to access setter for foo
Run Code Online (Sandbox Code Playgroud)

我正在使用Ruby 1.8.7,谢谢

Mla*_*vić 5

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

foo.send("#{k}=".to_sym, bar.send(v.to_sym))
Run Code Online (Sandbox Code Playgroud)

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