Scala 如何获取流的最后计算值?
Scala how to get last calculated value of stream?
根据 scala 文档,stream 实现了惰性列表,其中的元素仅在需要时才进行评估。例子;
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 文档,stream 实现了惰性列表,其中的元素仅在需要时才进行评估。例子;
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
.