Карта Scala:таинственный синтаксический сахар?
-
22-08-2019 - |
Вопрос
Я только что выяснил этот синтаксис для scala Map
(используется здесь в изменяемый форма)
val m = scala.collection.mutable.Map[String, Int]()
m("Hello") = 5
println(m) //PRINTS Map(Hello -> 5)
Теперь я не уверен, является ли это синтаксическим сахар встроено в язык, или здесь происходит что-то более фундаментальное, связанное с тем фактом, что карта расширяет PartialFunction
.Кто-нибудь может объяснить?
Решение
Если вы имеете в виду (было бы неплохо, если бы вы могли быть более откровенными)
m("Hello") = 5
это предназначенный синтаксический сахар для
m.update("Hello", 5)
независимо от того, что такое m.Это аналогично
m("Hello")
который является синтаксическим сахаром для
m.apply("Hello")
(Я просто читаю "Программирование на Scala".)
Другие советы
@starblue прав.Обратите внимание, что вы также можете делать довольно креативные вещи с update
например, возвращаемые значения Другое чем то, что было назначено.Например:
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
Это работает, потому что immutable.Map#update
возвращает экземпляр нового Map
.Это выглядит немного странно для наметанного глаза, но к этому привыкаешь.