2012-04-06 7 views
2

私はスカラを学ぼうとしていて、それまでは素晴らしかったです。 このエラーを修正する方法がわかりません。その中でforeachとreturn文について自分自身を教えようとしましたが、問題はまだ分かりません。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

通常、 'return'はScalaでは使用されず、' Array'のような可変データ構造は通常避けられます。あなたのメソッドの慣用句(drexinの答えからのデフォルトを含む)は 'def a = 1〜5 find(_ == 3)getOrElse 0'(あるいは' val a = 3' :)です) –

答えて

11

これは、foreachのラムダが値を返すことを保証しているからです。デフォルトの戻り値を指定した場合は正常に動作します。

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

elseまたはデフォルトの戻り値がないためです。

メソッドに戻り値の型Intがある場合、そのメソッド内のすべてのパスがIntを返す必要があります。これはあなたの実装では当てはまりません。たとえば、配列内に3がない場合、何も返されません。つまり、戻り値の型はUnitです。

関連する問題