2012-04-30 5 views
25

나는 우수한 Ruby on Rails Tutorial을 읽고 다음 코드를 발견했습니다.Ruby에서 0을 True로 처리해야하는 이유는 무엇입니까?

if 0 
    true 
else 
    false 
end 

위의 반환 true 많은 언어 (C 명백한 예이다)과 달리, 루비 true0을 처리하는 방법을 보여줍니다. 특이한 행동을 기각하는 대신, 본 대회에서이 중요한 출발에 대한 충분한 이유가 있다고 가정합니다. 예를 들어 Python은 0False으로 처리합니다.

요약하면 0true으로 처리하기위한 루비 설계의 근거는 무엇입니까?

답변

52

나는 Matz가 "진실"의 개념 단순성을 원했던 것으로 추측하고 있습니다. 유일한 "거짓"값은 falsenil입니다. 기간.

그냥 false을 사용하는 것이 가장 깨끗하지만, nil을 포함 할 필요가 있습니다. 정수 0을 특수한 경우로 포함 시키면 다른 유형의 질문 진실성에 대한 정신적 경계를 열 수 있습니다. 문자열에 대해서는 ""이 거짓입니까? 그리고 배열은 [] 거짓입니까? 그리고 해시는 {} 거짓입니까? 광고 무기물 (자바 스크립트 참조) ...

+9

특히 파이썬에서 루비로 갈 때부터 흥미로운 점은 파이썬에서 이름 ('[]','{}','' "'')이 모두'false'라는 점입니다. 내 견해로 이것은 루비의 기이함을 향상시킵니다. – enocom

+7

루비, 펄, 자바 스크립트, 루아 (루아 등)가 파이썬을 배우면서 사람들이 그 값이 사실이 아니라는 것을 이상하게 여기는 걸 알았습니다. – maerics

+2

레일스는 #blank ?, #present ?, #empty?를 추가했으며 아마도 0, [], {} 및 ""이 false가 아니기 때문에 더 많은 정보를 제공 할 것입니다. 이 때문에 루비의 코드 원칙이 약해 지므로 코드가 커집니다. – allenhwkim

10

루비 있음, 존재하는 경우 사실입니다. 그렇지 않다면 거짓입니다.

그래서 Ruby null (할당 된 주소 없음) 및 false는 false입니다.

다른 모든 주소는 주소가 할당되어 있기 때문에 true입니다.

나는이 방법을 생각한다. "그것이 존재 하는가?"

+4

당신이 말한 것은 사실이 아닙니다 :'nil'은 객체이고,'false'도 있고, 둘 다 존재합니다 : 그들은 NilClass와 FalseClass의 인스턴스입니다. 유일한 false 값은'false'와'nil'입니다. – jackdoe

+0

... * "except"*'false' – DigitalRoss

+2

예, 모든 것이 루비의 객체입니다. nil은 NilClass 클래스의 유일한 인스턴스입니다. null 포인터가있는 인스턴스를 가리키고 있기 때문에 실제로 중요하지 않다고 생각합니다. 나는 이것을 '존재하지 않는 것'으로 간주한다. – allenhwkim

5

커먼 리스프에서는 0도 true로 취급됩니다. 예를 들어 다음 코드는 true을 반환합니다.

(if 0 'true 'false) 

의심 할 여지없이 루비는 Lisp과 동일한 디자인 결정을 따르고 있습니다. Lisp에서는 빈 목록 (nil으로 표시) 만 false입니다.

관련 문제