Scala Karte: mysteriös syntaktischer Zucker?
-
22-08-2019 - |
Frage
Ich habe gerade diese Syntax für eine scala Map
fand heraus (verwendet hier in wandelbar Form)
val m = scala.collection.mutable.Map[String, Int]()
m("Hello") = 5
println(m) //PRINTS Map(Hello -> 5)
Jetzt bin ich nicht sicher, ob diese syntaktische ist Zucker gebaut in der Sprache, oder ob etwas fundamentalere ist hier los Einbeziehung der Tatsache, dass eine Karte ein PartialFunction
erstreckt. Könnte jemand erklären?
Lösung
Wenn Sie meinen, (es wäre schön, wenn man noch deutlicher sein könnte)
m("Hello") = 5
das ist syntaktischen Zucker, die für
m.update("Hello", 5)
unabhängig von dem, was m. Dies ist analog zu
m("Hello")
das ist syntaktischer Zucker für
m.apply("Hello")
(Ich lese gerade "Programming in Scala").
Andere Tipps
@starblue ist richtig. Beachten Sie, dass Sie auch tun können, eher kreative Dinge mit update
wie Rückkehr Werte andere als das, was zugewiesen. Zum Beispiel:
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
Das funktioniert, weil immutable.Map#update
eine Instanz der neuen Map
zurückgibt. Es sieht ein wenig seltsam an die C-geübtes Auge, aber man gewöhnt sich dran.