use*_*107 3 scala tail-recursion
我对 Scala 还是比较陌生。我正在浏览 Scala 的 List 实现,在那里我看到很多函数在实现中仍然使用“var”。我一直在阅读 scala 如何更加面向功能,因此如果库尽可能不使用尾递归,则不要使用“var”。
例如,exsits 可以重写为:
@tailrec
def exists[A](f : A => Boolean) : Boolean = this match {
case Nil => false
case l:LinearSeq[A]=> if (f(l.head)) true else exists(l.tail,f)
}
Run Code Online (Sandbox Code Playgroud)
我问的原因是因为我阅读了很多不鼓励使用“var”的材料,但我看到在 List 实现中使用了很多。
谢谢!
当你有类似的东西时List,它在几乎每个 Scala 程序中都经常使用:
即使是很小的加速(或减速)也会产生很大的累积效应;
它的贡献者往往是非常了解 Scala 底层细节的人(如果有些人不知道,他们的补丁将由那些了解的人审查)。
因此,给刚学习 Scala 的人的建议并不是特别适用。
对于这个特定的例子:@tailrec直到 Scala 2.8 才存在,这段代码可能是更早编写的(我没有检查过)并且没有足够的理由重写它。
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |