Scala Mappa: misteriosa zucchero sintattico?
-
22-08-2019 - |
Domanda
Ho appena scoperto questa sintassi per una Map
scala (usato qui in mutevole modulo)
val m = scala.collection.mutable.Map[String, Int]()
m("Hello") = 5
println(m) //PRINTS Map(Hello -> 5)
Ora io non sono sicuro se questo è sintattica zucchero costruito alla lingua, o se qualcosa di più fondamentale sta succedendo qui che coinvolgono il fatto che una mappa si estende un PartialFunction
. Qualcuno potrebbe spiegare?
Soluzione
Se vuoi dire (sarebbe bello se si potesse essere più espliciti)
m("Hello") = 5
che è destinato zucchero sintattico per
m.update("Hello", 5)
indipendente da ciò che è m. Questo è analogo a
m("Hello")
che è zucchero sintattico per
m.apply("Hello")
(sto solo leggendo "Programming in Scala").
Altri suggerimenti
@starblue è corretta. Si noti che è possibile anche fare le cose piuttosto creative con update
come i valori di ritorno altro di quello che è stato assegnato. Ad esempio:
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
Questo funziona perché immutable.Map#update
restituisce un'istanza della nuova Map
. Sembra un po 'strano per l'occhio C-addestrato, ma ci si abitua ad esso.