Mic*_*ael 2 iterator scala stream lazy-evaluation scala-collections
我注意到方法combinations(从这里)返回Iterator。该方法应该是“懒惰的”以避免提前生成所有组合,这看起来很合理。现在我想知道,为什么它返回Iterator而不是Stream(这是 Scala 中的惰性列表)。
那么,为什么combinationsreturnIterator而不是Stream?
有了Stream它更可能是所有生成的值将在内存中举行。
scala> val s = Stream.iterate(0)(_ + 1)
s: scala.collection.immutable.Stream[Int] = Stream(0, ?)
scala> s.drop(3).head
res1: Int = 3
scala> s
res2: scala.collection.immutable.Stream[Int] = Stream(0, 1, 2, 3, ?)
Run Code Online (Sandbox Code Playgroud)
当您保留对 的引用时Stream,所有生成的元素都将保留在内存中。有了Iterator这种情况就不太可能发生了。
当然,这不一定是 Scala 库被设计成这样的原因......
| 归档时间: |
|
| 查看次数: |
1748 次 |
| 最近记录: |