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,谢谢
不确定 1.8.7,但在较新的 Ruby 中这是有效的:
foo.send("#{k}=".to_sym, bar.send(v.to_sym))
Run Code Online (Sandbox Code Playgroud)
此外,在较新的版本中,也send接受字符串,因此您可以省略.to_sym.
| 归档时间: |
|
| 查看次数: |
575 次 |
| 最近记录: |