据我了解,Scala的Iterator
类型是对可能无限的序列的惰性遍历。例如,
scala> Iterator continually 0 take 3 foreach println
0
0
0
现在根据https://github.com/scala/scala/blob/v2.12.8/src/library/scala/collection/Iterator.scala#L504,通过创建另一个迭代器对遍历进行筛选,对迭代器进行筛选会推迟评估。例如,
scala> Iterator continually 0 filter 0.==
res0: Iterator[Int] = non-empty iterator
这几乎立即返回。但是,使用永远不可能为真的谓词进行过滤似乎会陷入无限循环。例如,
scala> Iterator continually 0 filter 1.==
这里有什么区别?他们俩不应该做同一件事吗,即创建并立即返回新的Iterator
?