Карта Scala: таинственный синтаксический сахар? - PullRequest
9 голосов
/ 25 марта 2009

Я только что обнаружил этот синтаксис для scala Map (используется здесь в изменяемой форме)

val m = scala.collection.mutable.Map[String, Int]()
m("Hello") = 5
println(m) //PRINTS Map(Hello -> 5)

Теперь я не уверен, является ли это синтаксическим сахаром , встроенным в язык, или же здесь происходит нечто более фундаментальное, связанное с тем, что карта расширяет PartialFunction. Кто-нибудь может объяснить?

Ответы [ 2 ]

14 голосов
/ 25 марта 2009

Если вы имеете в виду (было бы неплохо, если бы вы могли быть более явным)

m("Hello") = 5

предназначенный синтаксический сахар для

m.update("Hello", 5)

независимо от того, что м. Это аналог

m("Hello")

который является синтаксическим сахаром для

m.apply("Hello")

(я просто читаю «Программирование в Scala».)

5 голосов
/ 25 марта 2009

@ 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. Это выглядит немного странно для натренированного глаза, но к этому привыкаешь.

...