(カスタム) 継続を構築することにより、構造体の末尾再帰に対する操作を実行しようとしていますが、コンパイラは私のコードが末尾再帰であることを受け入れません。末尾以外の位置で再帰関数を参照する関数リテラルを宣言しようとするとすぐに、ここで関数を呼び出していなくてもエラーがスローされます。以下は、何がエラーをトリガーするかについての非常に単純化されたダミーの例です。
import scala.annotation.tailrec
object Test extends App {
@tailrec
def tailrectest(i: Int): Int = i match {
case i if i > 0 => {
val x = () => tailrectest(10)
tailrectest(i - 1)
}
case 0 => 0
}
}
私は得る
could not optimize @tailrec annotated method tailrectest: it contains a recursive call not in tail position
の行を参照していますval x = () => tailrectest(10)