如何使用条件更新OpenStruct值

时间:2016-08-07 03:29:17

标签: ruby openstruct

如果符合条件,如何更新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值?

1 个答案:

答案 0 :(得分:2)

更好但仍然不是非常明确:

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

编辑 - 更好的是:

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

这看起来对我很好。你不能直接通过迭代器进行变异。