2009-03-25 10 views
9

मैं सिर्फ एक स्केला Map (परिवर्तनशील रूप में यहां इस्तेमाल किया)स्कैला मानचित्र: रहस्यमय वाक्य रचनात्मक चीनी?

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.apply("Hello") 

वाक्यात्मक चीनी (मैं सिर्फ "स्काला में प्रोग्रामिंग" पढ़ रहा हूँ।)

+0

क्या आप मुझे स्कैला में प्रोग्रामिंग में पृष्ठ पर इंगित कर सकते हैं; जब तक कि मैं अंधेरा नहीं हूं, मुझे यह नहीं मिल रहा है। मुझे वास्तव में आश्वस्त नहीं है कि यह –

+0

पर वाक्य रचनात्मक चीनी है क्या आप संकेत दे सकते हैं कि "अद्यतन" विधि पदानुक्रम में कहां है? मैं इसे भी नहीं ढूंढ सकता! –

+3

यह पृष्ठ 40 पर है। – starblue

5

@starblue सही है

m("Hello") 

के अनुरूप है। ध्यान दें कि आप 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 का एक उदाहरण देता है। यह सी-प्रशिक्षित आंखों के लिए थोड़ा अजीब दिखता है, लेकिन आप इसका इस्तेमाल करते हैं।

+3

तो "एम (के) = वी" m.update (के, वी) के लिए वाक्य रचनात्मक चीनी है। कोई कैसे बता सकता है कि यह मामला है? उन अन्य तरीकों से सिंटैक्टिक चीनी लागू हो सकती है? और मैं स्कालाडोक में मानचित्र (या इसके किसी भी विरासत में) पर एक विधि अद्यतन भी नहीं देख सकता। मुझे यह कैसे पता चलेगा कि मानचित्र में ऐसी विधि थी? –