Carte Scala: mystérieux sucre syntaxique?
-
22-08-2019 - |
Question
Je viens de trouver cette syntaxe pour une Map
scala (utilisé ici dans mutable formulaire)
val m = scala.collection.mutable.Map[String, Int]()
m("Hello") = 5
println(m) //PRINTS Map(Hello -> 5)
Maintenant, je ne suis pas sûr que ce soit syntaxique sucre construit dans la langue, ou si quelque chose de plus fondamental qui se passe ici impliquant le fait qu'une carte étend un PartialFunction
. Quelqu'un pourrait-il expliquer?
La solution
Si vous voulez dire (ce serait bien si vous pouviez être plus explicite)
m("Hello") = 5
qui est destiné le sucre syntaxique pour
m.update("Hello", 5)
indépendamment de ce que m est. Ceci est analogue à
m("Hello")
qui est du sucre syntaxique pour
m.apply("Hello")
(je lis juste "Programmation Scala".)
Autres conseils
@starblue est correct. Notez que vous pouvez aussi faire des choses avec update
plutôt créatives telles que les valeurs de retour autre que ce qui a été affecté. Par exemple:
val a = Map(1 -> "one") // an immutable Map[Int, String]
val b = a(2) = "two"
val c = b(5) = "five"
val d = c(1) = "uno"
d == Map(1 -> "uno", 2 -> "two", 5 -> "five") // => true
Cela fonctionne parce que immutable.Map#update
renvoie une instance de la nouvelle Map
. Il semble un peu étrange à l'œil C-formé, mais on s'y habitue.