2017-04-26 2 views
-1

나는 예를했습니다 : 그것은 단지 숫자 2를 사용하는 것과 같은, 그리고 그것이 사실 반환 것처럼 분명히 2 만 2Fixnum && Fixnum이 왜 마지막 번호를 반환하고 false가 아닌지?

+1

JavaScript, Python 및 * 많은 * 동적 언어와 동일합니다. – meagar

+2

여기서 무엇을 묻고 있습니까? * * 당신의 표현이 * 모든 * 언어에서'거짓 '으로 평가되는 이유는 무엇입니까? 나는 당신의'&&'가 실패 할 언어가 없다는 것을 알고,'22' 또는'2 == 2'가 boolean'false'에 던져 짐을 암시합니다. 하나는 0이 아닌 수이고 다른 하나는 부울 인 '참'입니다. – meagar

+0

나는 22 && 2가 두 숫자를 비교하고 있다고 생각했지만, 그 일이 일어나지 않았습니다. 이제 tadman의 대답을 읽은 후에 이해합니다. –

답변

1

동일하기 때문에이 코드에

if 22 && 2 == 2 
    puts "true" 
else 
    puts "false" 
end 

이 보인다 루비에서 논리적으로 거짓 인 것은 nilfalse입니다. 그 밖의 모든 것, 0, 빈 문자열, 빈 배열, 빈 해시 등은 ​​입니다. 모두은 논리적으로 간주됩니다. 이것은 true 또는 false과 같은 리터럴 값으로 강제 캐스팅 할 필요가 없으므로 Ruby가 &&||과 같은 부울 연산자를 처리하는 방법에 영향을 미칩니다.

이와 같이 22 && 2은 논리적으로 거짓 일 수 없습니다. && 운영자가 작동하는 방법은 휴식이나 평가를 확인하는 마지막 요소를 반환 :

1 && 2 && 3 
# => 3 
1 && false && 3 
# => false 
1 && 2 && nil 
# => nil 

false이 존재하는 두 용어 중 하나 인 경우 false을 반환 할 것이다 && 작업이 유일한 방법. 이 같이 발생할 수 있습니다

1 && !1 
# => false 

이 때문에 !1 evalutes false로입니다.

&&의 결과가 항상 부울 값인 일부 언어에 익숙 할 수도 있지만 여기서는 그렇지 않습니다.

업데이트 : 여기서 가리키는 무엇 @meagar하는 것은 코드가 실제로으로 평가된다

22 && (2 == 2) 

에 코스 상당하다 : true로 평가

22 && true 

.

+0

여기에 '22 && 2'가 없습니다. '22 && true'입니다. – meagar

+0

@meager 아, 올바른 것으로 보이는 [선행 규칙] (https://ruby-doc.org/core-2.2.0/doc/syntax/precedence_rdoc.html) 때문입니다. – tadman