基本上沒有多說:
在if-else
分支,每當有比賽的條件已經發現,已經歸還,則匹配條款的最後聲明由if-else
塊。考慮以下:
arg = 4
p m = if (arg == 1)
"1"
elsif (arg == 3)
"3"
elsif (arg ==4)
"5";"11"
elsif
"3"
end
輸出:
#11
但是與每個條規則時,如果發現有任何裸露elsif
然後if-else
塊檢查其直接表達的真值,並相應地返回的值:
arg = "4"
p m = if (arg == "1")
47
elsif
10 ; "7"
elsif (arg =="5")
12;14
elsif
2
end
O本安輸出:
#"7"
下面的代碼將返回nil
一樣沒事就回來作爲10
作爲條件檢查,在代碼後一無所獲。所以nil
已經退回。
arg = "4"
p m = if (arg == "1")
47
elsif
10
elsif (arg =="5")
12;14
elsif
2
end #nil
另一個代碼下面把事情終於明白:
arg = "4"
p m = if (arg == "1")
47
elsif
nil
elsif (arg =="5")
12;14
elsif
2 ; "44"
end #44
與所有的例子說,上面我希望的原因很清楚爲什麼 - 下面的代碼輸出:[1, 2, nil, nil, nil, nil, nil, nil, nil]
p (1...10).map { |i|
if (i == 1)
1
elsif (i == 2)
2
elsif
3
end
}
要回答你的第一個代碼,首先看看下面的兩個:
m = if puts "hi"
p "hello"
end #"hi"
「hi」打印爲puts
返回nil
其中if
子句評估爲false
因此hello
未打印。但下面的代碼的確如p
那裏使用,並且if
子句在p
返回值true
上執行。
m = if p "hi"
p "hello"
end
#"hi"
#"hello"
希望現在你明白了爲什麼3
即將從下面的代碼輸出,從應用作爲一個整體的所有邏輯以上:你的意思是你
arg = 3
if (arg == 1)
puts "1"
elsif (arg == 2)
puts "2"
elsif
puts "3"
end
有趣的是,該任擇議定書的第二個例子,除此之外的情況下返回nill的原因,是因爲它的治療3,如有條件進入一個空塊。而在第一個print語句作爲條件打印出來的值,但仍返回零 – Mgrandjean 2013-04-04 16:14:28
@Mgrandjean執行是的,你是正確的。 – 2013-04-04 16:29:02
謝謝你,幫了我很多。 – 2013-04-04 16:31:34