我对Scala还是比较陌生。我正在研究Scala的List实现,在那里我看到很多功能部件仍在实现中使用“ var”。我一直在阅读scala如何更注重功能,因此,如果可能的话,库不使用尾部递归,而不要使用“ var”。
例如,存在可以改写为:
@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)
}
我问的原因是,我在不鼓励使用“ var”的地方阅读了很多材料,但是我看到很多实现在List实现中使用。
谢谢!
[当您有List
之类的东西时,几乎在每个Scala程序中都经常使用它:
即使很小的加速(或减速)也会产生很大的累积影响;
它的贡献者往往是对Scala低级细节了解很多的人(如果不了解,他们的补丁将被那些知道的人查看)。
因此,仅向学习Scala的人提供的建议不是特别适用。
对于此特定示例:@tailrec
在Scala 2.8之前不存在,该代码可能是更早编写的(我没有检查过,并且没有充分的理由重写它。