2009-03-25 20 views
9

Sadece bu olmadığını dile inşa sözdizimsel şeker olup olmadığını veya (değişken formda burada kullanılan) bir scala MapScala Harita: gizemli sözdizimsel şeker?

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

Şimdi emin değilim bu sözdizimi öğrendim Bir haritanın, bir PartialFunction'u genişletmesiyle ilgili daha temel bir şey devam ediyor. Birisi açıklayabilir mi? Eğer demek istediğin

cevap

14

neyi m bağımsız

m.update("Hello", 5) 

için sözdizimsel şeker tasarlanmıştır

m("Hello") = 5 

(daha açık olabilir, eğer iyi olurdu). Bu

m.apply("Hello") 

için sözdizimsel şeker (Ben sadece "Scala programlama" okuyorum.)

+0

Scala'da Programlama bölümündeki sayfaya işaret edebilir misiniz? kör olduğum sürece onu bulamıyorum. Gerçekten bu sözdizimsel şeklin –

+0

olduğu konusunda ikna olmadım "Güncelleme" yönteminin hiyerarşide nerede olduğunu belirtebilir misiniz? Onu bile bulamıyorum! –

+3

Bu sayfa 40. – starblue

5

@starblue doğru olduğunu hangi

m("Hello") 

benzer. Ayrıca, atanan değerden diğer diğer değerleri gibi update ile daha yaratıcı şeyler yapabileceğinizi unutmayın. Örneğin: immutable.Map#update yeni Map bir örneğini döndürdüğü için

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 

Bu çalışır. C-eğitimli göze biraz garip geliyor, ama alışırsın.

+3

Yani "m (K) = V", m.update (K, V) için sözdizimsel şekerdir. Bunun böyle olduğunu nasıl anlayabiliriz? Başka hangi metotlar onlara sözdizimsel şeker uygulayabilir? Ve hatta scaladoc'ta Harita (veya onun mirasından herhangi biri) üzerinde bir yöntem güncellemesi bile göremiyorum. Haritanın böyle bir yöntemi olduğunu bile nasıl bilebilirdim? –