Scala Map: mysterious syntactic sugar?
Solution 1
If you mean (it would be nice if you could be more explicit)
m("Hello") = 5
that is intended syntactic sugar for
m.update("Hello", 5)
independent of what m is. This is analogous to
m("Hello")
which is syntactic sugar for
m.apply("Hello")
(I'm just reading "Programming in Scala".)
Solution 2
@starblue is correct. Note that you can also do rather creative things with update
such as returning values other than what was assigned. For example:
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
This works because immutable.Map#update
returns an instance of the new Map
. It looks a little odd to the C-trained eye, but you get used to it.
oxbow_lakes
Currently programming in scala and Java at GSA Capital, a multiple-award-winning quantitative investment manager. Experience: Scala (since 2008) Java (since 1999) SQLServer git
Updated on June 04, 2022Comments
-
oxbow_lakes almost 2 years
I have just found out this syntax for a scala
Map
(used here in mutable form)val m = scala.collection.mutable.Map[String, Int]() m("Hello") = 5 println(m) //PRINTS Map(Hello -> 5)
Now I'm not sure whether this is syntactic sugar built in to the language, or whether something more fundamental is going on here involving the fact that a map extends a
PartialFunction
. Could anyone explain? -
oxbow_lakes about 15 yearsCould you point me to the page in Programming in Scala; unless I'm being blind I can't find it. I'm really not convinced that this is syntactic sugar at all
-
oxbow_lakes about 15 yearsCan you indicate where the "update" method is in the hierarchy? I can't even find it!
-
oxbow_lakes about 15 yearsThat's the bit in "Programming in Scala" which says that m("Hello") = 5 is equivalent to m.update("Hello", 5). But I can't actually see that Map has a method "update" on it.