2009-03-25 2 views
9

Я только что узнал, этот синтаксис для Скале Map (используется здесь в изменяемой формы)Scala Карта: таинственный синтаксический сахар?

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

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

ответ

14

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

m("Hello") = 5 

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

m.update("Hello", 5) 

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

m("Hello") 

который синтаксически

m.apply("Hello") 

(я только чтение "Программирование в Scala".)

+0

Не могли бы вы указать мне страницу в Программе в Scala; если я не слеп, я не могу его найти. Я действительно не уверен, что это синтаксический сахар вообще –

+0

Можете ли вы указать, где метод «обновления» находится в иерархии? Я даже не могу его найти! –

+3

Это на странице 40. – starblue

5

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

+3

Таким образом, «m (K) = V» означает синтаксический сахар для m.update (K, V). Как можно сказать, что это так? Какие другие методы могут применять к ним синтаксический сахар? И я даже не вижу обновления метода на карте (или любом ее свойстве) в scaladoc. Как бы я даже знал, что у Карты такой метод? –

Смежные вопросы