2010-05-10 17 views
6

I just descubrió que existen tales iteradores en Java.
¿Scala tiene iteradores con métodos 'set' y 'remove' para iterar (y modificar) colecciones mutables como array?
Si no existe dicho iterador, ¿hay una buena razón para eso?Iteradores para colecciones mutables en Scala?

+0

Debería copiar (o paráfrasis) la respuesta (s) que obtuvo en la lista de correo aquí (para la posteridad). –

+0

@Randall. Ok, di el enlace para maximizar la utilidad. –

Respuesta

6

Scala no tiene actualmente dicho iterador.

Sospecho que no lo hace porque

  • Tales iteradores no son en general (es decir, que sólo son utilizables con colecciones mutables) pero consumen espacio de nombres.

  • Debido a que pueden convertirse rápidamente en confuso para pensar en conjunto con las operaciones perezoso como takeWhile (¿Siempre es obvio lo x.takeWhile(_<5).add(5) debe hacer? Por un lado, el orden de las operaciones se parece como usted debe tomar primero, y luego añadir ; pero, por otro, take es perezosa mientras add menudo se pueden implementar de inmediato, por lo que la combinación de esta manera sería peligroso ingenuamente)

  • Tales iteradores son sólo una buena idea algorítmica con un conjunto muy especializado de colecciones (básicamente. solo listas y árboles vinculados; añadir y eliminar es una tontería para usar en matrices de todos modos, y no tiene mucho sentido en los conjuntos).

  • Cuando surge un conflicto intrínseco entre la generalidad y la velocidad, la biblioteca de colecciones de Scala suele favorecer la generalidad. Este tipo de iterador te hace pensar en las colecciones de una manera más particular (es decir, más ligada a la estructura de datos subyacente). Podría imaginarse una biblioteca que tomara decisiones diferentes, pero para una biblioteca de máxima utilidad (y aún bastante completa), la filosofía de la biblioteca de colecciones Scala es probablemente la mejor manera de hacerlo.

+0

Muy buenos argumentos, gracias. No veo ningún peligro con takeWhile. Es como x = x + 1. ¿Tal vez algunas colecciones deberían proporcionar iteradores especializados mezclados de varios rasgos? O bien, mebye, algún tipo de referencia debería devolverse como aquí: http://stackoverflow.com/questions/2799128/how-to-get-ponter-reference-semantics-in-scala/2799208#2799208 –

Cuestiones relacionadas