Scala Mapa: açúcar sintático misterioso?
-
22-08-2019 - |
Pergunta
Eu só descobri esta sintaxe para um Map
scala (usado aqui no mutável formulário)
val m = scala.collection.mutable.Map[String, Int]()
m("Hello") = 5
println(m) //PRINTS Map(Hello -> 5)
Agora, eu não tenho certeza se este é sintática açúcar embutido para a linguagem, ou se algo mais fundamental está acontecendo aqui envolvendo o fato de que um mapa estende uma PartialFunction
. Alguém poderia explicar?
Solução
Se você quer dizer (que seria bom se você pudesse ser mais explícito)
m("Hello") = 5
que se destina açúcar sintático para
m.update("Hello", 5)
independente do que m é. Isto é análogo ao
m("Hello")
que é açúcar sintático para
m.apply("Hello")
(Eu só estou lendo "Programação em Scala".)
Outras dicas
@starblue está correto. Note que você também pode fazer coisas bastante criativas com update
tais como valores de retorno outros do que o que foi atribuído. Por exemplo:
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
Isso funciona porque immutable.Map#update
retorna uma instância da nova Map
. Parece um pouco estranho para o olho treinado-C, mas você se acostumar com isso.