Итераторы для изменяемых коллекций в Scala? - PullRequest
6 голосов
/ 10 мая 2010

I просто обнаружил, что в Java есть такие итераторы.
Есть ли в Scala итераторы с методами set и remove для повторять (и модифицировать) изменяемые коллекции, такие как массив?
Если такого итератора нет, то есть ли для этого веская причина?

Ответы [ 2 ]

6 голосов
/ 10 мая 2010

В Scala в настоящее время нет такого итератора.

Я подозреваю, что это не потому, что

  • Такие итераторы не являются общими (то есть они могут использоваться только с изменяемыми коллекциями), но используют пространство имен.

  • Поскольку они могут быстро запутаться, думая о таких ленивых операциях, как takeWhile (Всегда ли очевидно, что должен делать x.takeWhile(_<5).add(5)? С одной стороны, порядок операций выглядит так, как будто вы должны принять сначала, а затем добавьте, но с другой стороны, take является ленивым, в то время как add часто может быть реализован немедленно, поэтому комбинировать их таким способом было бы наивно опасно.)

  • Такие итераторы являются хорошей идеей алгоритмически только с очень специализированным набором коллекций (в основном это только связанные списки и деревья; добавлять и удалять в любом случае глупо для использования с массивами, и для наборов это не имеет особого смысла) ).

  • Когда возникает внутренний конфликт между общностью и скоростью, библиотека коллекций Scala обычно предпочитает общность. Этот тип итератора заставляет вас думать о коллекциях более определенным образом (то есть более тесно связанным с базовой структурой данных). Вы можете представить себе библиотеку, которая делала разные варианты, но для максимально полезной (и все еще довольно производительной) библиотеки философия библиотеки коллекций Scala, вероятно, лучший путь.

1 голос
/ 11 мая 2010

Тема на ту же тему на comp.lang.scala.user

...