2012-10-18 34 views
2

因此,我正在寫一個學校的Ruby程序,如果某個值爲1或3,則將布爾值更改爲true,如果爲0或2,則爲false。我來自Java背景,我認爲這個代碼應該工作:if n == 1 || n == 3「或」如果在紅寶石塊

但它沒有。所以我的問題是可以在Ruby的If塊中使用「Or」表達式嗎?我知道我目前的情況可以通過如下方式輕易解決:

if n == 0 
    t_o_f = false 
elsif n == 1 
    t_o_f = true 

Et Cetera。但我想知道我是否可以在未來使用If或If塊。

+0

從'elsif'丟失了什麼? –

+0

當你嘗試'if n == 1 ||時會發生什麼n == 3'? –

+0

它不起作用?似乎爲我工作:https://gist.github.com/3912671 –

回答

3

是的,可以在if條件中使用任何表達式,包括使用||(邏輯或)運算符的條件。

與Java一樣,Ruby的||運算符短路。也就是說,如果左側是真的,則不評估右側。

慣用的紅寶石使用後綴如果爲單行:

puts "Yes" if n == 4 || n == 5 

避免後綴如果線長,然而,它分成多行:

if n == 4 || n == 5 
    puts "This is a big long string to be output....................." 
end 

這因爲後綴如果可以在長線結束時在視覺上丟失。

可以有一個班輪與前綴如果,但它不是常見的:

if n == 4 || n == 5 then puts "foo" end 

,或者也許是:

if n == 4 || n == 5 ; puts "foo" ; end 

這是一個真正的多行如果凝聚成一條線;分號用作換行符。

當多個條件進行測試時,它有時是有價值的使用Array#include?

puts "foo" if [4, 5].include?(n) 

的這個只有兩個條件的價值不是很大。對於三個或更多,它讀得很好。

+1

您不需要第二個分號,您可以使用'then'關鍵字代替第一個分號。 –

+0

@Jörg,謝謝。我從來不使用前綴 - 如果單線和忘記了這種形式。 –

0

除@Wayne Conrad:如果很少或根本沒有「邏輯」來判斷n是真還是假,那麼這也是一個不錯的選擇:

result = case n 
    when 1, 3 then true 
    when 0, 2 then false 
end