2009-03-25 10 views
9

ho appena scoperto questa sintassi per una scala Map (usato qui in mutabile forma)Scala Map: misterioso zucchero sintattico?

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

Ora io non sono sicuro se questo è sintattico zucchero costruito alla lingua, o se qualcosa di più fondamentale sta succedendo qui coinvolgendo il fatto che una mappa estende uno PartialFunction. Qualcuno potrebbe spiegare?

risposta

14

Se vuoi dire (sarebbe bello se si potesse essere più espliciti)

m("Hello") = 5 

che è destinato zucchero sintattico per

m.update("Hello", 5) 

indipendente da ciò che è m. Questo è analogo a

m("Hello") 

che è zucchero sintattico per

m.apply("Hello") 

(sto solo leggendo "Programming in Scala".)

+0

Potete indicarmi la pagina in Programmazione in Scala; a meno che non sia cieco, non riesco a trovarlo. Non sono affatto convinto che si tratti di zucchero sintattico –

+0

Puoi indicare dove si trova il metodo di "aggiornamento" nella gerarchia? Non riesco nemmeno a trovarlo! –

+3

È a pagina 40. – starblue

5

@starblue è corretta. Nota che puoi anche fare cose piuttosto creative con update come restituire i valori altro rispetto a ciò che è stato assegnato. Per esempio:

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 

Questo funziona perché immutable.Map#update restituisce un'istanza della nuova Map. Sembra un po 'strano per l'occhio addestrato a C, ma ti ci abitui.

+3

Quindi "m (K) = V" è zucchero sintattico per m.update (K, V). Come si può dire che questo è il caso? A quali altri metodi può essere applicato zucchero sintattico? E non riesco nemmeno a vedere un aggiornamento del metodo su Map (o su uno dei suoi elementi ereditari) nello scaladoc. Come potrei sapere che la mappa aveva un tale metodo? –

Problemi correlati