为什么我不能在Scala中再次使用迭代器

时间:2017-10-19 08:29:11

标签: scala

关于迭代器的两个问题

问题1)为什么迭代器以不能重用的方式实现?它实现了内存优化吗?

scala> while (it.hasNext) println(it.next)
1
2
3
4
5

scala> while (it.hasNext) println(it.next)

scala>

问题2)如何实现迭代器来实现此行为?是iterator只指向集合中的一个元素,如果有下一个元素,那么迭代器的先前值是否被覆盖?类似于LinkedList的东西,其逻辑类似于if (node->next != null) node = node->next

1 个答案:

答案 0 :(得分:3)

注意到方法hasNext()?该方法告诉您什么时候"所有内容都被迭代"。在你告诉你之后,为什么你希望这个方法再次返回true:"你看到了所有元素"之前?迭代器应该如何知道"您决定再次访问所有(或某些?)条目?!

(大多数)迭代器实现的重点是:你用它来“迭代”#34;按某种顺序处理某事。

整个概念着重于“按特定顺序迭代”#34;因此,您重新使用相同的迭代器的想法是不适合"适合"迭代器的基本思想。

当然,你可以创建自己的迭代器实现,允许"重置"迭代器。但正如所说:那将是你需要自己实现的东西。