作为 Scala 新手,我正在阅读书籍、文档并尝试解决在http://aperiodic.net/phil/scala/s-99/上发现的问题。似乎正确的 Scala 代码基于不可变值 (val) 和递归而不是循环和变量,以使并行性更安全并避免使用锁。
例如,练习 P22(http://aperiodic.net/phil/scala/s-99/p22.scala)的可能解决方案是:
// Recursive.
def rangeRecursive(start: Int, end: Int): List[Int] =
if (end < start) Nil
else start :: rangeRecursive(start + 1, end)
当然,这段代码很紧凑,看起来很聪明,但是,当然,如果递归次数很高,您将面临 StackOverflow 错误(rangeRecusrsive(1,10000) 例如没有 JVM 调整)。如果您查看内置 List.range 的来源(https://github.com/scala/scala/blob/v2.9.2/src/library/scala/collection/immutable/List.scala#L1),您'会看到使用了循环和变量。
我的问题是如何管理促进 vals 和递归的 Scala 学习内容的影响,因为知道此类代码会因递归次数而中断?