1

OpenStruct条件が満たされたときに値を更新するにはどうすればよいですか? 私は次のように考えました:

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

しかし、このコードは機能しません。

このコードで更新できましたが、かなり読みにくいです。

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

OpenStruct条件によって値を更新するより良い方法はありますか?

4

1 に答える 1

2

より良いですが、まだ明確ではありません:

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

編集 - さらに良い:

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

これは私にはかなり良さそうです。イテレータを介して直接変更することはできません。

于 2016-08-07T03:50:27.110 に答える