Iterators for mutable collections in Scala?

情到浓时终转凉″ 提交于 2019-11-28 12:23:50

Scala does not currently have such an iterator.

I suspect that it does not because

  • Such iterators are not general (i.e they are only usable with mutable collections) but consume namespace.

  • Because they can rapidly become confusing to think about in conjunction with lazy operations like takeWhile (Is it always obvious what x.takeWhile(_<5).add(5) should do? On the one hand, the order of operations seems like you should take first, and then add; but on the other, take is lazy while add can often be implemented immediately, so combining them this way would be dangerous naively.)

  • Such iterators are only a good idea algorithmically with a very specialized set of collections (basically only linked lists and trees; add and remove is foolish to use on arrays anyway, and it doesn't make much sense on sets).

  • When an intrinsic conflict arises between generality and speed, the Scala collections library typically favors generality. This sort of iterator makes you think about the collections in a more particular way (i.e. more closely tied to the underlying data structure). You could imagine a library that made different choices, but for a maximally useful (and still quite performant) library, the Scala collections library philosophy is probably the better way to go.

Thread on the same topic on comp.lang.scala.user

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!