如何根据条件更新 OpenStruct 值

How to update OpenStruct value with condition

如何在满足条件时更新 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 值?

更好但仍然不是很清楚:

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

编辑 - 更好的是:

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

我觉得这很不错。您不能直接通过迭代器进行变异。