2012-10-03 4 views
11

nil || falsefalse이고 false || nilnil을 반환합니다. 누구든지 이것에 대한 설명이 있습니까?nil || 거짓과 거짓 || 루비에서 nil

+0

보너스 포인트는 왜 'nil || 거짓과 거짓 || nil'은 거짓으로 평가됩니다. – pguardiario

+0

@pguardiario http://stackoverflow.com/questions/1840488/operator-precedence-for-and-in-ruby – x1a4

답변

16

루비에서는 모든 것이 표현식이며 표현식은 그 안에 평가 된 마지막 값을 반환합니다.

두 예제 모두에 대해 || 표현식의 왼쪽이 거짓 값으로 평가되므로 Ruby는 오른쪽을 계산하여 반환합니다.

+0

설명은 정말 분명합니다. 감사합니다! – user1538814

3

||은 평가 된 마지막 표현식의 결과를 리턴합니다. LHS를 평가하고 true 값을 찾으면 LHS를 얻습니다. 그렇지 않으면 RHS를 얻을 수 있습니다 (RHS가 무엇이든간에).

+0

정말 좋은 설명이었습니다. 고마워요! – user1538814

4

다른 사람들이 지적한대로 ||은 먼저 왼쪽의 표현식을 평가합니다. 그것이 "true"(false 또는 nil 이외의 것)이면, 그 값을 반환합니다. 그렇지 않으면, 오른쪽에있는 표현식을 평가하고 반환합니다 (그것이 무엇이든간에).

이렇게하면 ||이 단지 부울 테스트 이외의 많은 용도로 유용합니다.

@now = options[:now] || Chronic.time_class.now 

의미 : "는 options 해시가 :now 값을 포함하는 경우, 저장 @now에 그렇지 않으면, Chronic.time_class.now에 후퇴. chronic 보석에 대한 몇 가지 코드를 작성할 때 예를 들어, 난 그냥 그것을 다른 일을 사용 기본값 "으로 설정합니다. 나 자신의 프로그램에서 가능한 많은 응용 프로그램을 생각할 수 있다고 확신합니다.

&&과 유사합니다. 먼저 왼쪽의 표현식을 평가하고 false 또는 nil으로 평가하면 결과를 반환합니다. 그렇지 않으면, 오른쪽에있는 표현식을 평가하고 반환합니다 (그것이 무엇이든간에).

즉, &&이고 또한은 부울 테스트 이외의 많은 기능에 유용합니다. 이 코드를 사용하여 두 줄의 코드를 하나로 묶을 수 있습니다. 예를 들면 :

do_something && do_something_else 

(당신이 do_something의 반환 값이 false 또는 nil 수 없을 것이라는 점을 알고있는 경우에만 작동하는지!)

또한 같은에 "가드"표현을 짜내 &&을 사용할 수 있습니다 "지키는"그것이 무엇인지와 같은 라인 :

message && send_message(message) 

가 대체 할 수있다 :

unless message.nil? 
    send_message(message) 
end 
+0

나는 여전히 루비를 배우고있다. 그러나 이것은 정말로 도움이된다. – user1538814