Venant d'un Java
fond, je suis habitué à la pratique courante de traiter avec des collections: évidemment, il y aurait des exceptions, mais généralement de code devrait ressembler à:
public class MyClass {
private Set<String> mySet;
public void init() {
Set<String> s = new LinkedHashSet<String>();
s.add("Hello");
s.add("World");
mySet = Collections.unmodifiableSet(s);
}
}
Je dois avouer que je suis un peu déconcerté par la pléthore d'options en Scala. Il y a:
-
scala.List
(etSeq
) -
scala.collections.Set
(etMap
) -
scala.collection.immutable.Set
(etMap
,Stack
mais pasList
) -
scala.collection.mutable.Set
(etMap
,Buffer
mais pasList
) scala.collection.jcl
Tellement de questions!
- Pourquoi sont -
List
etSeq
défini dans le packagescala
et passcala.collection
(même si les implémentations de l'Seq
se trouvent dans la collection de sous-paquets)? - Quel est le mécanisme standard pour l'initialisation d' une collection, puis de congélation (ce qui dans le langage Java est réalisé en l'enveloppant dans un
unmodifiable
)? - Pourquoi certains types de collection (par exemple,
MultiMap
) seulement défini comme muable? (Il n'est pas immuableMultiMap
)?
J'ai lu Daniel Spiewak de l' excellente série sur les collections scala et je suis toujours intrigué par la façon dont on pourrait les utiliser dans la pratique. La suite semble un peu lourd en raison de la disparition forcée package complet déclarations:
class MyScala {
var mySet: scala.collection.Set[String] = null
def init(): Unit = {
val s = scala.collection.mutable.Set.empty[String]
s + "Hello"
s + "World"
mySet = scala.collection.immutable.Set(s : _ *)
}
}
Bien que l'on peut dire que c'est plus correct que la version de Java que l'immuable collection ne peut pas changer (comme en Java cas, où la collection sous-jacente pourrait être modifiée sous l' unmodifiable
wrapper)