以下是引發編譯錯誤的最小代碼:「不在尾部位置的遞歸調用」。但是,我使用的是@inline
,而遞歸調用是處於尾部位置。我使用這個@inline
的原因是我有兩次重複的原始reccall
的代碼。無法優化方法
import scala.annotation._
object Test {
@tailrec private def test(i: Int): Int = {
@inline def reccall(i: Int): Int = test(i-1)
i match {
case 0 => 0
case i => reccall(i)
}
}
}
我看了答案Recursive call not in tail position@tailrec why does this method not compile with 'contains a recursive call not in tail position'?,但他們並不適用於我的情況。使用Scala的2.12
可能的重複https://stackoverflow.com/questions/25582515/make-method-actually-inline –