2016-08-07 9 views
1

条件が満たされたときにOpenStructの値を更新するにはどうすればよいですか? 私はこのように思った:条件付きでOpenStruct値を更新する方法

o = OpenStruct.new(a: 1, b: 2) 
o.each_pair{|k,v| v = 3 if v.even? } 

しかし、このコードは動作しません。

このコードで更新することはできますが、読みにくいです。条件によってOpenStruct値を更新するためのより良い方法は

OpenStruct.new(o.each_pair.map{|k,v| [k, v.even? ? 3 : v] }.to_h) 

ありますか?

+0

'o.b.evenならo.b = 3? #=> 3; o#=>#; o.to_h#=> {:a => 1、:b => 3} '。 –

答えて

2

良いが、それでもスーパーはっきりしていない:

o.to_h.each { |k, v| o[k] = 3 if v.even? } 

EDIT - いっそのこと:これは私にはなかなか良さそうです

o.each_pair { |k, v| o[k] = 3 if v.even? } 

。イテレータで直接変更することはできません。

+0

申し訳ありませんが、私の質問は私が何をしたいのか明確ではありませんでした。私は質問を更新しました。 – ironsand

+0

@ironsand - 更新を参照してください – seph

+0

ありがとうございます。だから、 'OpenStruct'クラスの値を更新する簡単な方法はありませんか? – ironsand

関連する問題