2011-07-15 22 views
10

Scala tiene un mapa mutable e inmutable, pero solo tiene una lista inmutable. Si desea una Lista mutable, necesita un ListBuffer.Sin lista mutable de Scala

No entiendo por qué esto es así. ¿Alguien sabe ?.

+2

¿No hay una [MutableList] (http://www.scala-lang.org/api/current/scala/collection/mutable/MutableList.html)? – Nishant

+0

'List' tiene un significado muy específico en ciencias de la computación y Scala siguió eso (en lugar de continuar el abuso de Java de este término :-D). – soc

+0

Este es un duplicado, pero, por desgracia, no puedo encontrar el anterior. –

Respuesta

6

Espero que este artículo pueda ser de alguna utilidad para usted. El diagrama en la parte inferior de la página es particularmente útil para proporcionar las clases mutables e inmutables.

http://www.scala-lang.org/docu/files/collections-api/collections_1.html

+1

La respuesta aceptada por Jean-Philippe Pellet es más directa, y le da algunas clases que puede incluir en su código para superar su problema. Sin embargo, Graham en realidad * respondió * su pregunta sobre "¿por qué es así?". Espero que lea el enlace que proporcionó, ya que lo ayudará a comprender mejor la idea detrás de colecciones mutables e inmutables en Scala. –

3

Hay una mutable List, pero se llama Buffer. El artículo vinculado por Graham entra en más profundidad, pero pensé que debería haber una respuesta específica a la pregunta también.

0

Map es un trait - como Java interface -, mientras que List es un class, una implementación concreta de Seq. Hay Seq mutable e inmutable, al igual que para Map.

Esto puede ser confuso para los programadores de Java, ya que, en Java, List es un interface, cuya (principales) son implementaciones ArrayList y LinkedList. Por desgracia, nombrar Java es atroz. En primer lugar, ArrayList no es un List por cualquier tramo de la imaginación. Además, la interfaz tiene métodos que no están realmente relacionados con ninguna lista tradicional.

Por lo tanto, si desea una equivalencia mutable/inmutable, consulte las implementaciones de subclases concretas de Seq.

Cuestiones relacionadas