我最近开始探索更多关于Scala的内容,我一直在阅读一些文本。因此,我遇到了一种叫做尾递归的东西。我知道如何编写尾递归方法。例如-添加列表中的元素(当然可以使用reduce方法完成),但为了理解,我编写了一个尾递归方法:def sum(l: List[Int], acc:Int): Int = l match {
case Nil =>
在堆栈溢出上有各种各样的答案,它们解释了在中可以使用尾递归的条件。我理解它的局限性,以及如何和如何利用尾递归的优势。我不明白的部分是为什么对私有或最终方法的限制存在。我还没有研究Scala编译器实际上是如何在字节码级别将递归函数转换为非递归函数的,但让我们假设它会执行如下操作。我有一个具有递归函数Foo的类mod。else if(0 <= value &am
下面,sumAllIf是尾部递归的,而sumAllFold不是。然而,sumAllIf实际上具有相同的实现。这是Scala编译器(或者Scala库)的一个缺点,还是我忽略了什么?def maybeNext(in: Int): Option[Int] = if in < 10 then Some(in + 1) else None
// The Scala library implementsnextOption.isEmpty) sum else sumAllIf(nextOption.get,