2010-05-10 69 views
6

I just發現在Java中有這樣的迭代器。 斯卡拉是否有迭代器,使用'set'和'remove'方法來迭代(和修改)像數組這樣的可變集合?
如果沒有這樣的迭代器,那麼是否有充分的理由呢?斯卡拉可變集合的迭代器?

+0

您應該複製(或意譯)的答案(S)你在郵件列表上拿到過這裏(爲後人)。 – 2010-05-10 16:09:22

+0

@Randall。好吧,我給了鏈接以最大限度地發揮作用。 – 2010-05-11 00:34:45

回答

6

Scala目前沒有這樣的迭代器。

我懷疑它不會因爲

  • 這樣的迭代器不是一般的(即他們只使用與可變集合),但消耗的命名空間。

  • 因爲它們能迅速變得混亂思考與懶惰的操作,例如takeWhile(一起是它總是什麼明顯x.takeWhile(_<5).add(5)該怎麼辦?一方面,操作的順序好像你應該採取先,然後添加;但另一方面,take是懶惰而add經常可以立即執行,所以將它們結合起來這種方式將是危險的天真)

  • 這樣的迭代器只是一個好主意算法具有非常專業的集藏品的(基本上是這樣。只有鏈表和樹;無論如何,添加和刪除在數組上使用都是愚蠢的,並且它對集合沒有多大意義)。

  • 當普遍性和速度之間出現內在衝突時,Scala集合庫通常有利於普遍性。這種迭代器可以讓你以更具體的方式思考集合(即與底層數據結構更緊密的聯繫)。你可以想象一個圖書館做出了不同的選擇,但對於一個最有用的(並且仍然非常有效的)圖書館來說,斯卡拉館藏圖書館哲學可能是更好的選擇。關於同一主題

+0

非常好的論點,謝謝。 我沒有看到takeWhile的危險。它就像x = x + 1。也許有些集合應該提供混合了幾種特性的專用迭代器?或mebye某種引用應返回像這裏: http://stackoverflow.com/questions/2799128/how-to-get-ponter-reference-semantics-in-scala/2799208#2799208 – 2010-05-11 00:21:41