2012-04-06 38 views
2

我正在嘗試學習scala,迄今爲止它一直很棒。 我很難找出如何解決這個錯誤,我試圖教育自己關於foreach和返回他們內部的陳述,但我仍然不明白的問題,所以我在這裏發佈我的問題:foreach中返回值的方法

def a: Int = { 
    for(i <- Array(1,2,3,4,5)){ 
    if(i == 3) 
     return i 
    } 
} 

上述方法將無法編譯,我得到以下錯誤:

error: type mismatch; 
found : Unit 
required: Int 
     for(i <- Array(1,2,3,4,5)){ 
      ^

我明白了一個類型是什麼,但我無法弄清楚如何解決這個問題。我如何將我分配給int?預期的行爲是該方法返回3.這是否會發生,以及我的代碼有什麼問題?

+7

在Scala中通常不會使用'return',通常可以避免像'Array'這樣的可變數據結構。你的方法的慣用等價物(包括drexin的答案中的默認值)可能類似於'def a = 1至5 find(_ == 3)getOrElse 0'(或者'val a = 3' :)) – 2012-04-06 12:55:36

回答

11

這是因爲您在foreach中的lambda確實會保證返回一個值。如果你提供一個默認的返回值,它應該工作。

def a: Int = { 
    for(i <- Array(1,2,3,4,5)){ 
    if(i == 3) 
     return i 
    } 
    0 
} 
2

這是因爲沒有別的或默認的返回值。

如果一個方法的返回類型爲Int,那麼該方法中的所有路徑都必須返回一個Int。在你的實現中情況並非如此。例如,如果在數組中不存在數字3,則不會返回任何數據,這意味着返回類型將爲單位。