2011-07-15 4 views
10

Scala possède à la fois une mappe mutable et une carte immuable, mais elle n'a qu'une liste non modifiable. Si vous voulez une liste mutable, vous avez besoin d'un ListBuffer.Aucune liste mutable Scala

Je ne comprends pas pourquoi c'est ainsi. Quelqu'un sait ?.

+2

N'existe-t-il pas une [MutableList] (http://www.scala-lang.org/api/current/scala/collection/mutable/MutableList.html)? – Nishant

+0

'List' a une signification très spécifique en informatique et Scala a suivi cela (au lieu de continuer à abuser de Java de ce terme: -D). – soc

+0

Ceci est un doublon, mais, malheureusement, je ne peux pas trouver le plus ancien. –

Répondre

6

J'espère que cet article vous sera utile. Le diagramme en bas de la page est particulièrement utile pour fournir les classes mutables et immuables.

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

+1

La réponse acceptée par Jean-Philippe Pellet est plus directe, et vous donne quelques classes que vous pouvez jeter dans votre code juste pour passer votre problème. Cependant, Graham a * répondu * à votre question quant à "pourquoi c'est ainsi?". J'espère que vous lirez le lien qu'il a fourni, car il vous aidera à mieux comprendre l'idée derrière les collections mutables et immuables de Scala. –

3

Il y a un List mutable, mais il est appelé Buffer. L'article lié par Graham va plus loin, mais je pensais qu'il devrait y avoir une réponse spécifique à la question également.

0

Map est un trait - comme Java interface -, tandis que List est un, une implémentation concrète d'un Seq. Il y a mutable et immutable Seq, tout comme pour Map.

Cela peut être source de confusion pour les programmeurs Java parce que, en Java, List est un interface, dont les mises en œuvre (principaux) sont ArrayList et LinkedList. Hélas, le nommage de Java est atroce. Tout d'abord, ArrayList n'est pas un List par tout effort d'imagination. En outre, l'interface a des méthodes qui ne sont pas vraiment liées à une liste traditionnelle. Donc, si vous voulez une équivalence mutable/immutable, regardez les implémentations concrètes de la sous-classe Seq.