我一直在使用Scala的剛剛開始,所遇到的一些問題,我真的不明白,和我希望stackoverflow社區能夠說明一些事情。
使用此測試:
example(1,List(1))
此代碼的工作,因爲我所期望的 - 在第二次迭代則返回0:
def example(value: Int, list: List[Int]): Int = {
if (list.isEmpty)
return 0
else
return 1
example(value - list.head, list.tail) + example(value, list.tail);
}
但是,此代碼不 - 它拋出一個NoSuchElementException( 「空頭清單」)第二次迭代:
def example(value: Int, list: List[Int]): Int = {
if (list.isEmpty)
0
else
1
example(value - list.head, list.tail) + example(value, list.tail);
}
差異似乎是t在第二個例子中,Scala假定「0」和「1」不是返回值,而是要評估的表達式,因爲在函數結尾處有另一個表達式。由於顯式的「返回」關鍵字,第一個示例將按預期返回,這是有道理的。
但是,考慮到第二個例子中if語句的語法,我會認爲編譯器會意識到「0」不是要評估的表達式,而是一個返回值。爲什麼不是這種情況?
這個確切的問題被問到今天早些時候:http://stackoverflow.com/questions/12560463/return-in-scala – dhg