結構
case a
when x
code_x
when y
code_y
else
code_z
end
相同的計算結果爲
if x === a
code_x
elsif y === a
code_y
else
code_z
end
每個when
調用的when
參數的方法===
,傳球case
參數作爲參數(x === a
是相同的x.===(a)
) 。 ===
方法與==
稍有不同:它通常被稱爲「個案包容」。對於數字和字符串等簡單類型,它與==
是一樣的。對於Range
和Array
對象,它是.include?
的同義詞。對於Regexp
對象,它與match
非常相似。對於Module
對象,它會測試參數是否爲該模塊的實例或其後代的一個實例(基本上,如果x === a
,則爲a.instance_of?(x)
)。因此,在你的代碼,
if (1..101) === i
...
elsif (i == 101) === i
...
else
...
end
執行幾乎同樣的測試,
if (1..101).include?(i)
...
elsif (i == 101) == i
...
else
...
end
注意,這裏的case
另一種形式的不使用===
:
case
when x
code_x
when y
code_y
else
code_z
end
這等同於
if x
code_x
elsif y
code_y
else
code_z
end
讀者:如果你看到這個答案和我的一些相似之處,你應該知道我的原始答案是不正確的混亂,這並沒有被這個戴頭盔的Rubiest所忽略。在我完成編輯的同時,他提交了他的答案。 –