Scala如何获取最后一次计算的流量值?

alt*_*han 5 scala stream memoization lazy-evaluation scala-streams

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

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

之后在scala repl中;

fibs(4)
fibs
Run Code Online (Sandbox Code Playgroud)

它会打印出来;

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

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

sjr*_*jrd 3

你不能。这不是 的 API 的一部分Stream。并且有理由,因为这将允许您观察 a 中随时间变化的值Stream,并且违反了 的(惰性)不可变性质Stream