2014-02-14 2 views

답변

5

V는 로컬 블록 변수 인 따라서 변수에을 다시 할당하면 이 아닌이 해시에 영향을줍니다.

my_hash[k] = ""을 사용하면 실제 해시 객체에 부작용을 유발할 수 있습니다.


가 반복되는 동안 (좋아 한 키가 변경되지 않는 한 인) 해시를 돌연변이에 대한 대안은 새로운 해시를 생성하기 "기능"접근 방식을 사용하는 것입니다. 이것은 참고 용입니다. 반드시 접근 방식을 전환하는 논쟁은 아닙니다.

# for each pair in the hash, yield a corresponding output pair 
result = my_hash.map do |k,v| 
    [k, if v.nil? then "" else v] 
end 

# create a new hash from the result, which is [[k,v],..] 
my_hash = Hash[result] 
+1

'[k, v || ""]'false'가 가능한 값이 아닌 경우. –

+0

@ MarkThomas 실제로 여기에서 작동 할 가능성이 높습니다. 나는'nil? '을 사용하는 것에 관심이 있었기 때문에 비슷한 모양을 남겼습니다. – user2864740

+0

삼항 연산자의 팬이 아닌가? 'v.nil? ? '': v' – Matt

관련 문제