Scala 列出了 "var"的用法

标签 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)
}

我问的原因是因为我阅读了很多不鼓励使用“var”的 Material ,但我看到在 List 实现中使用了很多。

谢谢!

最佳答案

当你有类似 List 的东西时,几乎在每个 Scala 程序中都经常使用:

  • 即使是很小的加速(或减速)也会产生很大的累积效应;
  • 它的贡献者往往是非常了解 Scala 底层细节的人(如果有些人不知道,他们的补丁将由那些了解的人审查)。

  • 因此,给刚学习 Scala 的人的建议并不是特别适用。

    对于此特定示例:@tailrec直到 Scala 2.8 才存在,这段代码可能是更早写的(我没有检查过)并且没有足够的理由重写它。

    关于Scala 列出了 "var"的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60650205/

    相关文章:

    f# - 为什么 F# 编译器不为此函数创建尾调用?

    scala - 在 Scala 中,不可变列表共享内存吗?

    arrays - Scala 二维数组按主列和辅助列排序

    scala - 如何使用 gatling 将 scala 类导入另一个类?

    scala - Scala中,final val 和 val 之间的区别

    mysql - 在 ScalikeJDBC 中使用 SQLSyntaxSupport 时找不到列名称

    scala - Scala 中的类型细化但不使用细化

    javascript - 柯里化(Currying)形式的递归函数可以是尾递归吗?

    recursion - 方案:将递归改为尾递归

    lisp - 尾递归函数与否