【发布时间】:2015-08-11 02:14:48
【问题描述】:
假设我定义了以下函数:
final def myFunc[T](list: List[T]): List[T] = list match {
case h :: t =>
h :: myFunc(t)
case _ =>
Nil
}
当我添加 tailrec 注释时,编译器给我以下错误:
无法优化 @tailrec 注释的方法 myFunc:它包含一个 递归调用不在尾部位置:^Nil.
我对 Nil 的声明如何成为递归调用感到困惑?
【问题讨论】:
-
不是
Nil,而是::,这意味着对于堆栈中的每个调用,您仍然必须将部分结果连接到h,这就是为什么此方法不是尾递归的原因.作为测试,尝试case h :: t => myFunc(t)并打开 tailrec 注释。
标签: scala