1

こんにちは私の問題は単純です私は単純化されたコードがこのように見えます

foo = OpenStruct.new
bar = OpenStruct.new

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

私はこのeval使用法を修正しようとしていますが、使用していません:)右の部分を理解しましたが、左の部分に割り当てる方法がわかりません。ゲッターにアクセスするには、次のように書くことができます。

 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 については不明ですが、新しい Ruby では次のように動作します。

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

また、新しいバージョンでは、send文字列も受け入れるため、省略できます.to_sym

于 2012-10-11T11:04:52.490 に答える