2012-06-12 25 views
2

以下是irb shell中的簡單語句。輸出中的nil是什麼意思?它爲什麼伴隨if塊中的打印語句?這裏沒有什麼意思/代表什麼?

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

在Ruby中,所有表達式返回值,即使是nil。塊和方法只是返回最後一個表達式的值。有很多方法可以有效地使用它。例如,這就是經常不使用顯式return的原因。此外,你可以這樣做:

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

關於你提到的例子:除了打印,你指示的字符串,irb將顯示它來自的if-else塊接收到的值。由於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__一個值;它是['NilClass'](http://www.ruby-doc.org/core-1.9.3/NilClass.html)的一個實例,並且響應類似於任何其他對象的方法。 –

+0

雖然這在技術上是正確的,但我不認爲這是OP主要關注的內容。 – Digitalex