2009-03-25 8 views
9

私はちょうどこのスカラーMapの構文を見つけました(ここではの可変形式で使用されています)スカラマップ:神秘的な構文的な砂糖?

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

これは構文砂糖が言語に組み込まれているのか、マップがPartialFunctionを拡張しているという事実を含むより根本的なことが起こっています。誰でも説明できますか?

答えて

14

何メートルあるの独立した

m.update("Hello", 5) 

のためのシンタックスシュガーを目的としている

m("Hello") = 5 

(あなたがより明確にすることができれば、それはいいだろう)。これは

m.apply("Hello") 

のためにシンタックスシュガーである

m("Hello") 

に類似している(私は "Scalaでプログラミング" を読んでいます。)

+0

Scalaでのプログラミングのページを教えてください。私が盲目でない限り、私はそれを見つけることができません。私は本当にこれが構文的砂糖であると確信していません –

+0

「更新」メソッドが階層内にある場所を指定できますか?私はそれを見つけることさえできません! –

+3

それは40ページにあります。 – starblue

5

@starblueが正しいです。 updateでは、返された値その他のように、独創的なことを割り当てることもできます。たとえば:immutable.Map#updateは新しいMapのインスタンスを返すため

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 

これは動作します。それはC訓練された目に少し奇妙に見えますが、あなたはそれに慣れます。

+3

"m(K)= V"はmupdate(K、V)の構文糖です。どのようにこれが事実であることを伝えることができますか?他にどのような方法で構文砂糖を適用することができますか?スカードでMap(またはその継承者)のメソッド更新を見ることさえできません。その地図にそのような方法があったことを私はどのように知っていましたか? –