2012-06-12 2 views
2

다음은 irb 셸의 간단한 문입니다. 출력에서 nil은 무엇을 의미합니까? if 블록의 인쇄문과 함께 표시되는 이유는 무엇입니까?여기서 nil은 무엇을 의미합니까/나타내는가?

irb(main):062:0> if(x==20 && y==30) 
irb(main):063:1> print("if statement working !") 
irb(main):064:1> else 
irb(main):065:1* print("else statement working !!") 
irb(main):066:1> end 
if statement working !=> nil # what does nil represent here ? 

답변

5

, 모든 표현은 nil 경우에도, 값을 반환합니다. 블록과 메소드는 평가 된 마지막 표현식의 값을 간단히 리턴합니다. 이것을 효과적으로 사용하는 방법은 여러 가지가 있습니다. 예를 들어, 이것은 명시 적으로 return을 자주 사용하지 않는 이유입니다. 또한,이 작업을 수행 할 수 있습니다

print if x == 20 && y == 30 
    'if statement working!' 
else 
    'else statement working!' 
end 

당신의 예에 대해서 : 당신이 지침에 따라 문자열을 인쇄뿐만 아니라, irb이는 경우 - 다른 블록에서받은 값을 표시합니다. print은 항상 nil을 반환하므로 두 분기가 동일한 값을 반환합니다.

2

이는 if 블록이 값을 반환하지 않는다는 것을 의미합니다 (실제로는 가능). 예를 들어, 다음은 완벽하게 합법적이고 실행 가능 :

루비에서
foo = if bar > 10 
    42 
else 
    0 
end 

# now, foo is either 42 or 0 
+1

즉, print/puts는 값을 반환하지 않습니다. – Amir

+3

'nil' __is__ a 값; 이것은 ['NilClass'] (http://www.ruby-doc.org/core-1.9.3/NilClass.html)의 인스턴스이며 다른 객체와 같은 메소드에 응답합니다. –

+0

이것이 기술적으로 정확하지만, OP가 주로 관심을 가졌던 부분이라고 생각하지 않습니다. – Digitalex

관련 문제