2016-08-07 3 views
1

조건이 충족 될 때 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 값을 업데이트하는 더 좋은 방법이 있습니까?

+0

'o.b.even 인 경우 o.b = 3? # => 3; o # => # ; o.to_h # => {: a => 1, : b => 3}'. –

답변

2

더 나은하지만 여전히 슈퍼 명확하지 :

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

편집 - 더 나은 아직 : 이것은 나에게 꽤 좋아 보인다

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

. 당신은 반복기를 통해 직접 변이시킬 수 없습니다.

+0

죄송합니다. 내 질문에 내가하고 싶은 것이 분명하지 않았습니다. 나는 그 질문을 갱신했다. – ironsand

+0

@ironsand - 업데이트 – seph

+0

을 참조하십시오. 그래서'OpenStruct' 클래스에서 값을 업데이트하는 쉬운 방법이 없습니까? – ironsand