2012-10-14 2 views
1

에 값을 할당 할 때 나는 루비에 새로운 오전 나는 다음 않았다부울 연산 루비

c = {} 
# Some code in the middle 
c['a'] = c['a'] or 0 

지금 나는이 같은 일이 기대 : c['a']nil 경우, 다음 c['a'] or 0 그래서 0을 반환 c['a']의 값은 0이어야합니다.

그러나 c['a']의 값은 nil입니다. 왜 이런 일이 생길까요?

답변

4

or is not the same as || in Ruby를 사용합니다. 당신이 가진 것은 다음과 같이 그룹화됩니다 :

(c['a'] = c['a']) or 0 

기본적으로 아무 것도하지 않습니다. 대신 ||를 사용한다 : 단순히

c['a'] = c['a'] || 0 

나 : and/&&or/||와 같은 동작을 가지고

c['a'] ||= 0 

참고.

+1

"또는"는 Ruby에서 '||'와 같지 않습니까? –

+0

@muistooshort 자주 ': P'가 자주 올 것 같습니다. 실제로 클립 보드 스 니펫 (snippets)과 같이 주석에 남겨두기 위해 실제로 (그리고 다른 일반적인 것들도) 가지고 있습니다. (그리고 어리석은 오타를 고쳐 주셔서 감사합니다!) –

+0

오 .. 끔찍하고 까다 롭습니다. 위 기사에서 'and'와 'or'를 컨트롤 변경자로 사용하는 것이 가장 좋습니다. 링크 및 답변 주셔서 감사합니다. – Aishwar

2

=or보다 높은 우선 순위를 가지고, 그래서 당신은 당신이 무엇을 기대 할 수 있도록 괄호가 필요합니다

c['a'] = (c['a'] or 0) 

을하거나 평소와 같이 || :

+0

그래, 나는 대부분의 것들에 대해'||'을 사용해야하는 것 같습니다 :) – Aishwar