我对方法take
在特征Iterator
中的行为感到困惑。看起来它不会消耗物品。下面是一个例子:从scala中消耗项目迭代器
scala> Iterator(1,2,3)
res0: Iterator[Int] = non-empty iterator
scala> res0 take 2 toArray
res1: Array[Int] = Array(1, 2)
scala> res0.next
res2: Int = 1
显然步骤2消耗两个项目,但在步骤3中的Iterator
仍处于第一项。看看实现,我看不到任何复制或缓冲,只是一个新的Iterator
委托给底层。这怎么可能?我怎样才能真正消费n项目?
谢谢retronym,我明白了这一点。是什么让我放弃了'Stream'就是缺乏像“当前项目指针”这样的东西(顺便说一句,也许是由于Java的影响力,可能是所谓的东西)。现在我看到,我可以通过一系列“drop”并查看“head”来获得“当前指针”。我会再试一次。 – jglatre