Concaténer deux immuable cartes - quels sont les éléments à privilégier?
Lors de la concaténation de deux immuable cartes, il semble que les éléments de l'opérande de droite va "écraser" les éléments de la gauche:
scala> List((1, 2), (5, 6)).toMap ++ List((5, 9)).toMap
res13: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2, 5 -> 9)
scala> List((5, 9)).toMap ++ List((1, 2), (5, 6)).toMap
res14: scala.collection.immutable.Map[Int,Int] = Map(5 -> 6, 1 -> 2)
Je voudrais savoir, si c'est une règle en Scala ?
De la Scala API je ne pouvais pas comprendre cette question.
Vous devez vous connecter pour publier un commentaire.
Oui, ce comportement est constant
++
s'appuie sur+
, qui à son tour repose surupdated
et dans ceci scaladoc il est précisé queupdated
retourne une nouvelle immuable carte mis à jour avec les nouvelles valeurs. Ouais, je sais, pas une preuve absolue, alors, probablement, vous ne fermez pas cette question encore et d'attendre une meilleure référence. La Java "Carte" de référence est le taureau$hit bien.Map.++
est défini comme:où
repr
est votre carte actuelle etxs.seq
vous donne une séquence de paires/mappages stockées dans la carte que vous passez à++
.Map./:
est décrit comme:Noter qu'il n'est pas spécifié que "de gauche à droite" signifie, pour un non-ordonnée de la carte.
L'exemple suivant illustre ce qui se passe derrière la scène par de réimplanter
++
et en l'augmentant avec debugprintln
états:def seq
de retourner lui-même, c'est à dire,this
,xs.seq
évalue donc à la même carte quexs
n'. Je suppose que l'on pouvait remplacerdef seq
dans les sous-classes, mais je ne sais pas assez de la conception interne des collections de la bibliothèque pour voir quand cela serait utile ou même nécessaire.