根据scala docs,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" (最后计算的值)以最有效的方式?
答案 0 :(得分:3)
你做不到。这不是Stream
的API的一部分。并且有理由,因为这样可以让您观察到Stream
随时间变化的值,并且会违反Stream
的(懒惰)不可变性质。