use*_*088 2 recursion functional-programming scala
@tailrec
private def loop[V](key: String): V = {
key match {
case _ => loop(key)
}
}
Run Code Online (Sandbox Code Playgroud)
此方法不编译并抱怨它"包含不在尾部位置的递归调用".有人可以向我解释发生了什么事吗?此错误消息对我没有意义.
Den*_*nko 10
如果指定泛型类型,它编译正常:
import scala.annotation.tailrec
@tailrec
private def loop[V](key: String): V = {
key match {
case _ => loop[V](key)
}
}
Run Code Online (Sandbox Code Playgroud)
我认为错误信息在这种情况下具有误导性.
简化版本可以更好地暗示正在发生的事情:
scala> @tailrec
| private def loop[V](key: String): V = {
| loop(key)
| }
<console>:14: error: could not optimize @tailrec annotated method loop: it is called recursively with different type arguments
loop(key)
^
Run Code Online (Sandbox Code Playgroud)