2013-03-03 3 views
3

case 항등 연산자 같은 === 작동합니다. 우선 순위와 작업, 나는 다음과 같이 시도하는 방법혼란 ===`

2 === 2 #=> true 
2 .=== 2 #=> true 

확인하려면 :

2 === 2 === 3 
# SyntaxError: (irb):3: syntax error, unexpected tEQQ 
# 2 === 2 === 3 
#   ^
#  from C:/Ruby193/bin/irb:12:in `<main>' 

왜 오류가 반환 되었습니까? 다음은 오류를 발생시키지 않습니다. 위의 오류를 어떻게 해결합니까?

2 .=== 2 === 3 #=> false 
+1

@sawa 편집 해 주셔서 감사합니다. –

답변

6

Ruby는 먼저 평가할 표현식을 알지 못하므로 오류가 발생합니다. Integer#=== 메서드를 .===으로 명시 적으로 호출하면 Ruby는이 메서드를 다른 메서드 호출로 간주하므로 모든 메서드가 해당 메서드에 대한 인수라고 가정합니다. 차례로

2.===(2 === 3) 

이 표현은 모호하지 않으며, 따라서 오류없이 평가 될 수 있습니다 때문에이 옵션 괄호에, 당신은 실제로 당신의 마지막 예제에서 작성.

예상 한 결과가 반환되지 않습니다. 예 :

2.===(2 === 2) 
#=> false 

때문에 내부 2 === 2의 반환 값 true이다. 그런 다음 2과 비교되며 2.===(true)false을 반환합니다.

+0

'+ 1'입니다. 채팅을 시작할 수 있습니까? 나는 너에게 물어볼 게있다. 괜찮 으면 –

+0

http://chat.stackoverflow.com/rooms/25471/15187998에 가입하십시오. –