为什么失败的迭代器过滤器会卡住?

时间:2018-12-29 04:47:53

标签: scala

据我了解,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

0 个答案:

没有答案