2014-05-12 35 views
0

我在我的早期斯卡拉小時,我期望以下兩位代碼行爲相同,但他們不。我的印象是「其他」是可選的。斯卡拉如果其他行爲

任何想法爲什麼?這是在toString方法(以表示有理數的簡單類)

可正常工作,返回「1」(爲1/1):

if(numer == denom) { 
    "1" 
} else { 
    numer + "/" + denom 
} 

這不,返回「1/1" :

if(numer == denom) { 
    "1" 
} 

numer + "/" + denom 

回答

6

else部分確實是可選的,但一個方法的返回值是在該方法的最後表達的值。所以,當你沒有將其他部分放在實際的else塊中時,你總是返回該值。作爲一種解決方案,您可以使用if/else表達式(這是首選方式),也可以在if語句中使用實際的return語句。

// The return value of the method is the value of the if/else expression. 
if (numer == denom) { 
    "1" 
} else { 
    numer + "/" + denom 
} 

if (numer == denom) { 
    return "1" 
} 

numer + "/" + denom 
+0

葉氏,我錯誤地假設,' 「1」'會執行,因爲它會立即返回最後一個語句和最後一條語句'NUMER + 「/」 + denom'止跌甚至不會被評估。 –

+0

@Kaveh - 你可以使用'return'語句來強制這個行爲,但它不是慣用的Scala方式。 – Gangstead