2010-05-10 13 views
6

I just ho scoperto che esistono tali iteratori in Java.
Scala ha iteratori con i metodi 'set' e 'remove' per iterating (e modifica) collezioni mutabili come array?
Se non esiste un tale iteratore, esiste una buona ragione?Iteratori per collezioni mutabili in Scala?

+0

Si dovrebbe copiare (o parafrasi) la risposta (s) avete ottenuto sulla mailing list qui (per i posteri). –

+0

@Rallest. Ok, ho dato il link per massimizzare l'utilità. –

risposta

6

Scala non dispone attualmente di un iteratore.

ho il sospetto che non è così, perché

  • Tali iteratori non sono di carattere generale (vale a dire che sono utilizzabili solo con le collezioni mutabili), ma consumano spazio dei nomi.

  • Perché possono rapidamente diventare fonte di confusione per pensare insieme alle operazioni pigri come takeWhile (E 'sempre ovvio cosa x.takeWhile(_<5).add(5) dovrebbe fare? Da un lato, l'ordine delle operazioni sembra che si dovrebbe prendere prima, e poi aggiungi , ma dall'altro, take è pigra mentre add possono spesso essere attuata immediatamente, quindi combinandoli questo modo sarebbe pericoloso ingenuamente)

  • Tali iteratori sono solo una buona idea algoritmico con un insieme molto specializzato di collezioni (in pratica. solo liste e alberi collegati, aggiungere e rimuovere è sciocco da usare sugli array in ogni caso, e non ha molto senso sugli insiemi).

  • Quando sorge un conflitto intrinseco tra generalità e velocità, la libreria di collezioni Scala in genere favorisce la generalità. Questo tipo di iteratore ti fa pensare alle collezioni in un modo più particolare (cioè più strettamente legato alla struttura dati sottostante). Si potrebbe immaginare una libreria che ha fatto scelte diverse, ma per una libreria estremamente utile (e ancora abbastanza performante), la filosofia della libreria delle collezioni Scala è probabilmente il modo migliore per andare.

+0

Argomentazioni molto buone, grazie. Non vedo un pericolo con takeWhile. È come x = x + 1. Forse alcune collezioni dovrebbero fornire iteratori specializzati mescolati con diversi tratti? O mebye una sorta di riferimento dovrebbe essere restituito come qui: http://stackoverflow.com/questions/2799128/how-to-get-ponter-reference-semantics-in-scala/2799208#2799208 –

Problemi correlati