Как обновить значение 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 ответ

Решение

Лучше но еще не супер понятно

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

РЕДАКТИРОВАТЬ - еще лучше:

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

Это выглядит довольно хорошо для меня. Вы просто не можете мутировать напрямую через итератор.

Другие вопросы по тегам