2

Stream[Int]让我们用元素定义一个(1,2,3)

scala> val x = Stream(1,2,3)
x: scala.collection.immutable.Stream[Int] = Stream(1, ?)

x据我了解,它是Stream(1, ?)按需评估的,即在必要时进行评估。

然后,我打电话x.last

scala> x.last
res0: Int = 3

最后,我x再次打电话来看看它的价值。

scala> x
res1: scala.collection.immutable.Stream[Int] = Stream(1, 2, 3)

自从我调用后是否x相等,导致访问所有值(在列表中从左到右)?Stream(1,2,3)x.last

4

1 回答 1

3

来自 APi 文档:“Stream 类还采用记忆化,以便将先前计算的值从 Stream 元素转换为具体值”

另一件可能与直觉相反的事情似乎是您的流应该是不可变的事实之间的矛盾......但文档明确表示“虽然流实际上在访问期间被修改,但这并没有改变其不变性的概念。一旦记住了这些值,它们就不会改变,尚未记住的值仍然“存在”,它们只是还没有被实现。” (取自:http ://www.scala-lang.org/api/current/scala/collection/immutable/Stream.html )

所以换句话说你是对的=)

于 2013-11-07T06:11:02.830 回答