2011-11-11 3 views
5

가능한 중복 :
Difference between “and” and && in Ruby?
Ruby: difference between || and 'or'루비의 '또는'대 '||'

이 코드를했다

(이런 일이) 내가 foo를 원

foo = nil or 4 

는 (첫 번째 값이 될 수 있습니다 예 : nil) 또는 기본값 4. irb에서 테스트 한 결과 출력은 내가 기대했던 것입니다. 어리석은 저, 나는 foo의 가치를 나중에 검사하지 않았다. 잠시 후, 나는 내 코드에서 몇 가지 오류를 발견하기 시작했고, 내가 예상했던 것 대신에 nil 인 012b의 값을 irb에 다시 확인하기 전까지는 문제를 발견하지 못했습니다.

or||에 대한 이야기는 무엇입니까? 그들은 대체품으로 일하기로되어 있습니까? || 대신 or을 사용하는 것에 대한 몇 가지주의 사항이 있습니까?

+0

내가 질문에 직접 관련이 동의하고, 거의 동일한 대답을 가지고 있지만, 그들은 같은 질문하지 않습니다 :

|| 버전은 당신이 원하는 않습니다. 첫 번째 것이'또는'vs'||'과'and' vs'&&'를 비교하기 위해 확장 된 것이라면, 그것들이 중복되었다는 것에 동의 할 것입니다. – zzzzBov

+0

http://stackoverflow.com/questions/1434842/is-there-any-wisdom-behind-and-or-operators-in-ruby, http://stackoverflow.com/questions/3904888/why-and를 참조하십시오. - 또는 - 다르게 in-rails, & c. – jball

답변

12

여기의 문제가 우선합니다. or||보다 우선 순위가 낮습니다. 따라서, 귀하의 첫 번째 문은

(x = nil) or 4 

표현의 결과는 (당신이 irb에서 제대로 작동 있다고 생각하는 이유입니다) 4이다로 평가하지만, =을보다 낮은 우선 순위가 nilor 때문에 x는 할당 .

x = (nil || 4) 
2

or은 우선 순위가 매우 낮습니다.

4

or||=보다 우선 순위가 낮으므로 or보다 먼저 할당이 수행됩니다. ||=보다 우선 순위가 높고 먼저 실행됩니다.