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?
risposta
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 cosax.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 mentreadd
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.
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 –
Discussione sullo stesso argomento su comp.lang.scala.user
- 1. Micro benchmark per il confronto di collezioni mutabili e immutabili Scala con java.util.concurrent * collezioni
- 2. inconsistenza di scala 2.8 collezioni?
- 3. Scala per loop ed iteratori
- 4. mutable vs. immutable nelle collezioni Scala
- 5. La deforestazione in collezioni Scala
- 6. Scala - iteratori e TakeWhile
- 7. Incoerenze di collezioni Scala
- 8. Perché i letterali XML restituiscono oggetti mutabili in Scala?
- 9. Scala: unione di più iteratori
- 10. collezioni Scala diagramma di flusso
- 11. tipi di iteratori pigri in Scala?
- 12. Come combinare 2 iteratori in Scala?
- 13. buffer circolare di collezioni scala
- 14. Scala utilizza le variabili mutabili per implementare le sue apis
- 15. aggregazione groupwise efficiente su collezioni Scala
- 16. più codice "funzionale" Making a Scala per utilizzare collezioni immutabili
- 17. Come funziona la gestione della memoria per le collezioni Scala?
- 18. Tipo Scala di tipo e tipo this.type in collezioni
- 19. Quale tipo utilizzare per memorizzare una tabella di dati mutabili in memoria in Scala?
- 20. Set mutabili in NSManagedObjects?
- 21. Stringhe mutabili in Java
- 22. concatenamento iteratori per C++
- 23. convalida Riepilogo per Collezioni
- 24. relazione tra varianza e mutabilità/immutabilità in Scala
- 25. Quali operazioni sulle collezioni parallele Scala sono parallelizzate?
- 26. Campi mutabili in ccljure deftype?
- 27. Come rendere le collezioni immutabili di Scala detenere oggetti immutabili
- 28. Come raggruppare utilizzando più colonne nelle collezioni di scala
- 29. Scala situazione di stallo con le collezioni parallele
- 30. Interfaccia/Superclasse per collezioni/contenitori in C++
Si dovrebbe copiare (o parafrasi) la risposta (s) avete ottenuto sulla mailing list qui (per i posteri). –
@Rallest. Ok, ho dato il link per massimizzare l'utilità. –