如何根据条件更新 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? }
我觉得这很不错。您不能直接通过迭代器进行变异。
如何在满足条件时更新 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? }
我觉得这很不错。您不能直接通过迭代器进行变异。