2009-10-26 12 views
6

나는 ||or이 동의어 였다는 인상을 받았다.또는와 |와 | 사이의 차이 변수를 설정할 때

or으로 변수를 설정하면 값이 유지되지 않습니다. 왜?

>> test = nil or true 
=> true 
>> test 
=> nil 

>> test = false or true 
=> true 
>> test 
=> false 

작품 ||

>> test = nil || true 
=> true 
>> test 
=> true 
+0

이것은 나를 위해 잡았다. –

답변

15

or와 '예상대로'는 낮은 우선 순위를 =보다 있습니다. niltest 설정 중에

test = nil or true 

true이다
(test = nil) or true 

동일하다.

||=보다 우선합니다. truetest 설정 중에

test = nil || true 

true이다
test = (nil || true) 

동일하다.

+1

... 이런 식으로 코드를 작성하지 않던가, 아니면 우리가 무엇을하고 있는지 명확히하기 위해 항상 괄호를 사용할 것입니다. – mpen

+0

고맙습니다.이 말이 완벽합니다. –

+2

'||'는 매우 높고'또는'매우 낮은 우선 순위를 가질뿐만 아니라 '와'와'또는'도 * 같은 * 우선 순위를가집니다. 반면에'||'와'&&'는 우선 순위가 다릅니다. 일반적으로 조건식에서는 항상 연산자 형식을 사용합니다. 왜냐하면 실제로 연산자 형식은 사용자가 기대하는 상대적인 우선 순위를 가지기 때문입니다. 제어 흐름에 대해서만'and'와'or'를 사용하십시오. 여기서 "inside"표현식이 더 엄격하게 바인딩되기를 원할 것입니다. 'test = blah.get_records '또는'레코드가 없습니다. '와 같은 것입니다. –

1

동일 함 and&& 사이. 나는이 잡았다에 의해 한 번 인용되었다, 그때 나는 and&&보다 읽기 쉽지만 항상 더 적합하다는 것을 의미하지는 않는다는 것을 깨닫는다.

>> f = true && false 
=> false 
>> f 
=> false 
>> f = true and false 
=> false 
>> f 
=> true 
>> 
관련 문제