2009-03-25 16 views
9

Właśnie dowiedziałem się tej składni dla scala Map (stosowane tutaj w zmienny formie)Scala Mapa: tajemniczy cukier syntaktyczny?

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

teraz nie jestem pewien, czy jest to cukier syntaktyczny wbudowane w języku, czy dzieje się tu coś bardziej zasadniczego, polegającego na tym, że mapa rozszerza się o PartialFunction. Czy ktoś mógłby wyjaśnić?

Odpowiedz

14

Jeśli masz na myśli (byłoby miło, gdybyś mógł być bardziej wyraźne)

m("Hello") = 5 

który przeznaczony jest cukier syntaktyczny dla

m.update("Hello", 5) 

niezależnie od tego, co jest m. Jest to analogiczne do

m("Hello") 

czyli cukier syntaktyczny dla

m.apply("Hello") 

(mam tylko czytanie "Programowanie w Scala").

+0

Czy możesz wskazać mi stronę w Programowaniu w Scali; chyba że jestem ślepy, nie mogę go znaleźć. Naprawdę nie jestem przekonany, że to jest cukier syntaktyczny w ogóle. –

+0

Czy możesz wskazać, gdzie znajduje się metoda "aktualizacji" w hierarchii? Nawet nie mogę tego znaleźć! –

+3

To na stronie 40. – starblue

5

@starblue jest prawidłowe. Zauważ, że możesz także robić raczej twórcze rzeczy z update, takie jak zwracanie wartości inne niż to, co zostało przypisane. Na przykład:

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 

To działa, ponieważ immutable.Map#update zwraca instancję nowego Map. Wygląda to trochę dziwnie na oko wyszkolonego przez C, ale przyzwyczajasz się do tego.

+3

Zatem "m (K) = V" to cukier syntaktyczny dla m.update (K, V). Jak można powiedzieć, że tak jest? Jakie inne metody mogą mieć zastosowany cukier syntaktyczny? I nie mogę nawet zobaczyć aktualizacji metody na mapie (lub którejkolwiek z jej dziedziczek) w skaladoc. Skąd miałbym wiedzieć, że Map ma taką metodę? –

Powiązane problemy