В Scala в настоящее время нет такого итератора.
Я подозреваю, что это не потому, что
Такие итераторы не являются общими (то есть они могут использоваться только с изменяемыми коллекциями), но используют пространство имен.
Поскольку они могут быстро запутаться, думая о таких ленивых операциях, как takeWhile
(Всегда ли очевидно, что должен делать x.takeWhile(_<5).add(5)
? С одной стороны, порядок операций выглядит так, как будто вы должны принять сначала, а затем добавьте, но с другой стороны, take
является ленивым, в то время как add
часто может быть реализован немедленно, поэтому комбинировать их таким способом было бы наивно опасно.)
Такие итераторы являются хорошей идеей алгоритмически только с очень специализированным набором коллекций (в основном это только связанные списки и деревья; добавлять и удалять в любом случае глупо для использования с массивами, и для наборов это не имеет особого смысла) ).
Когда возникает внутренний конфликт между общностью и скоростью, библиотека коллекций Scala обычно предпочитает общность. Этот тип итератора заставляет вас думать о коллекциях более определенным образом (то есть более тесно связанным с базовой структурой данных). Вы можете представить себе библиотеку, которая делала разные варианты, но для максимально полезной (и все еще довольно производительной) библиотеки философия библиотеки коллекций Scala, вероятно, лучший путь.