2013-04-15 40 views

回答

3

tutorialspoint: - 說

case expression 
[when expression [, expression ...] [then] 
    code ]... 
[else 
    code ] 
end 

比較由case指定的expression和使用===操作時指定並執行when條款相匹配的代碼。

說,看看下面:

A = "am" 
F = "fm" 
L = "dd" 
B = 'aa' 
def fmam(n) 
    return if n == 0 

    case true 
    when n % 15 == 0 
     puts B + L 
    when n % 5 == 0 # this evaluates to true first, which then matched with true value mentioned in the case statement. 
     puts L 
    when n % 3 == 0 
     puts B 
    else 
     puts n 
    end 
end 
fmam(20) #=> dd 

現在來看看下面的代碼:

A = "am" 
F = "fm" 
L = "dd" 
B = 'aa' 
def fmam(n) 
    return if n == 0 

    case false 
    when n % 25 == 0 # this evaluates to false first, which then matched with false value mentioned in the case statement. 
     puts B + L 
    when n % 5 == 0 
     puts L 
    when n % 3 == 0 
     puts B 
    else 
     puts n 
    end 
end 
fmam(30) #=> aadd 
5

case有兩種形式。您使用的表格將case關鍵字(本例中爲true)之後的「目標」與使用===運算符的每個比較(每個when關鍵字之後的部分)進行比較。您最終得到一系列布爾表達式並執行第一個代碼,其計算結果爲true。因此,這是多餘的,有點令人困惑。這將是更好的去除true和使用第二種形式的case

case 
    when n % 15 == 0 
     puts B + L 
    when n % 5 == 0 
     puts L 
    when n % 3 == 0 
     puts B 
    else 
     puts n 
    end 

這做同樣的事情,但更清晰。

0

您可以重構case語句

msg = case 0 
when n % 15 
    B + L 
when n % 5 
    L 
when n % 3 
    B 
else 
    n 
end 
puts msg