1

私と Scala の間にはいくつかの誤解があります

0または1?

object Fun extends App {

 def foo(list:List[Int], count:Int = 0): Int = {

    if (list.isEmpty) { // when this is true
      return 1   // and we are about to return 1, the code goes to the next line
    }

    foo(list.tail, count + 1) // I know I do not use "return here" ...

    count
  }

  val result = foo( List(1,2,3) )

  println ( result ) // 0

}
  1. 0 と出力されるのはなぜですか?
  2. 「return」がなくても再帰が機能するのはなぜですか(関数の途中であり、最後ではない場合)?
  3. なぜ1を返さないのですか?「return」を明示的に使用する場合

- - 編集:

returnここを使えばうまくいきます"return foo(list.tail, count + 1)'。しかし、「return 1」が上記で機能しない理由を(私にとっては)説明していません。

4

5 に答える 5

1

foo の再帰呼び出しからの値ではなく、count最初の呼び出し (つまり、) からの値を返しています。0

より正確に言うと、コードでは、foo の再帰呼び出しの戻り値を使用しません。

これを修正する方法は次のとおりです。

def foo(list:List[Int], count:Int = 0): Int = {

    if (list.isEmpty) {
        1
    } else {
        foo(list.tail, count + 1)
    }
}

このように、あなたは得1ます。

ちなみに使わないreturn。期待どおりの結果が得られるとは限りません。

Scala では、関数は暗黙的に最後の値を返します。明示的に書く必要はありませんreturn

于 2013-09-21T16:28:13.757 に答える
0

プログラムで count を返します。これは定数であり、0 で初期化されているため、再帰の最上位レベルで返されます。

于 2013-09-21T17:32:56.743 に答える