Mapa Scala: azúcar sintáctico misteriosa?
-
22-08-2019 - |
Pregunta
Me acaba de descubrir esta sintaxis para una Map
Scala (utilizado aquí en mutable formulario)
val m = scala.collection.mutable.Map[String, Int]()
m("Hello") = 5
println(m) //PRINTS Map(Hello -> 5)
Ahora no estoy seguro de si esto es sintáctica azúcar integrado en el lenguaje, o si algo más fundamental está pasando aquí que implica el hecho de que un mapa se extiende un PartialFunction
. Podría explicar alguien?
Solución
Si se refiere a (sería bueno si pudiera ser más explícito)
m("Hello") = 5
que tiene por objeto el azúcar sintáctica para
m.update("Hello", 5)
independiente de lo que es m. Esto es análogo a
m("Hello")
que es el azúcar sintáctica para
m.apply("Hello")
(sólo estoy leyendo "Programación en Scala".)
Otros consejos
@starblue es correcta. Observe que también puede hacer cosas creativas con más update
como los valores que vuelven otro de lo que fue asignado. Por ejemplo:
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
Esto funciona porque immutable.Map#update
devuelve una instancia de la nueva Map
. Se parece un poco extraño en el ojo C-entrenado, pero uno se acostumbra a ella.