에 값을 할당 할 때 나는 루비에 새로운 오전 나는 다음 않았다부울 연산 루비
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
입니다. 왜 이런 일이 생길까요?
에 값을 할당 할 때 나는 루비에 새로운 오전 나는 다음 않았다부울 연산 루비
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
입니다. 왜 이런 일이 생길까요?
or
is not the same as ||
in Ruby를 사용합니다. 당신이 가진 것은 다음과 같이 그룹화됩니다 :
(c['a'] = c['a']) or 0
기본적으로 아무 것도하지 않습니다. 대신 ||
를 사용한다 : 단순히
c['a'] = c['a'] || 0
나 : and
/&&
가 or
/||
와 같은 동작을 가지고
c['a'] ||= 0
참고.
=
는 or
보다 높은 우선 순위를 가지고, 그래서 당신은 당신이 무엇을 기대 할 수 있도록 괄호가 필요합니다
c['a'] = (c['a'] or 0)
을하거나 평소와 같이 ||
:
그래, 나는 대부분의 것들에 대해'||'을 사용해야하는 것 같습니다 :) – Aishwar
"또는"는 Ruby에서 '||'와 같지 않습니까? –
@muistooshort 자주 ': P'가 자주 올 것 같습니다. 실제로 클립 보드 스 니펫 (snippets)과 같이 주석에 남겨두기 위해 실제로 (그리고 다른 일반적인 것들도) 가지고 있습니다. (그리고 어리석은 오타를 고쳐 주셔서 감사합니다!) –
오 .. 끔찍하고 까다 롭습니다. 위 기사에서 'and'와 'or'를 컨트롤 변경자로 사용하는 것이 가장 좋습니다. 링크 및 답변 주셔서 감사합니다. – Aishwar