作者:xao | 来源:互联网 | 2023-01-27 20:58
1> 小智..:
如果指定泛型类型,它编译正常:
import scala.annotation.tailrec
@tailrec
private def loop[V](key: String): V = {
key match {
case _ => loop[V](key)
}
}
我认为错误信息在这种情况下具有误导性.
简化版本可以更好地暗示正在发生的事情:
scala> @tailrec
| private def loop[V](key: String): V = {
| loop(key)
| }
:14: error: could not optimize @tailrec annotated method loop: it is called recursively with different type arguments
loop(key)
^
你可以通过`-Ydebug -Ylog:tailcalls`获得一些帮助.它似乎保持了最后的失败.也许它被模式混淆的算法混淆了,有一个代码注释说它曾经因为这个原因在typer之前运行.