Scala如何获得流的最后计算值?

标签 scala stream lazy-evaluation memoization scala-streams

根据 scala docs 流实现了惰性列表,其中元素仅在需要时进行评估。例子;

val fibs: Stream[BigInt] = BigInt(0) #:: BigInt(1) #:: fibs.zip(fibs.tail).map(n => { 
    n._1 + n._2
})  

之后在 scala repl 中;
fibs(4)
fibs

它会打印出来;

res1: Stream[BigInt] = Stream(0, 1, 1, 2, 3, ?)

自调用 .length .last 导致无限循环,如何以最有效的方式获得值“3”(最后计算的值)?

最佳答案

你不能。这不是 Stream 的 API 的一部分.这是有原因的,因为这将使您能够观察到随时间变化的值 Stream ,这违反了 Stream 的(懒惰)不变性.

关于Scala如何获得流的最后计算值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41867748/

相关文章:

java - 如何在akka actor中设置构造字段或配置加载?

Scala 案例类和尾递归最佳实践

java - 如何为 Spark 流检查点设置检查点间隔?

scala - 有没有办法使用 Gradle 的 Scala 3 编译器(Dotty)?

java - 我可以多路分解流吗?

dart - 从另一个流结果生成一个流

javascript - 如何从模块返回管道数据?

c# - C#/.NET 的惰性流

math.combinatorics 中的 Clojure 惰性序列会导致 OutOfMemory (OOM) 错误

python - 如何在 python 中编写可链接的惰性函数?