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 回答