2017-10-19 65 views
1

兩個問題爲什麼我不能在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

+0

想想一個代表隨機數或用戶輸入流的迭代器。 –

回答

3

注意到該方法hasNext()?該方法告訴你什麼時候「一切都被迭代了」。在你告訴你:「你看過所有的元素」之前,你爲什麼會希望這個方法再次變爲真?迭代器如何「知道」你決定重新訪問所有(或某些?!)條目再次?! (大多數)迭代器實現的重點是:用它來按某種順序「迭代」某個東西。

整個概念的重點在於「以特定順序迭代」。因此,您重複使用迭代器的想法是不符合迭代器的基本思想。

當然,你可以創建自己的迭代器實現,允許「重置」迭代器。但正如所說:這將是你需要實現自己的東西。

相關問題