एक अलग बिंदु यह है कि पहले वाक्य को इस प्रकार रखा गया है:
scala> List(1,2,3).++(List(4,5))
res0: List[Int] = List(1, 2, 3, 4, 5)
जबकि दूसरा उदाहरण इस प्रकार है:
scala> List(4,5).:::(List(1,2,3))
res1: List[Int] = List(1, 2, 3, 4, 5)
इसलिए यदि आप मैक्रोज़ का उपयोग कर रहे हैं, तो आपको ध्यान रखना चाहिए।
इसके अलावा, ++
दो सूचियों के लिए कॉल किया जा रहा है, :::
लेकिन अधिक ओवरहेड के साथ क्योंकि यह एक अंतर्निहित मूल्य के लिए एक बिल्डर से सूची से सूची के लिए पूछ रहा है। लेकिन माइक्रोबेनचर्च उस अर्थ में कुछ भी उपयोगी साबित नहीं हुए, मुझे लगता है कि कंपाइलर इस तरह के कॉल का अनुकूलन करता है।
गर्म करने के बाद माइक्रो-बेंचमार्क।
scala>def time(a: => Unit): Long = { val t = System.currentTimeMillis; a; System.currentTimeMillis - t}
scala>def average(a: () => Long) = (for(i<-1 to 100) yield a()).sum/100
scala>average (() => time { (List[Int]() /: (1 to 1000)) { case (l, e) => l ++ List(e) } })
res1: Long = 46
scala>average (() => time { (List[Int]() /: (1 to 1000)) { case (l, e) => l ::: List(e ) } })
res2: Long = 46
जैसा कि डैनियल सी। सोबराई ने कहा, आप किसी भी संग्रह की सामग्री का उपयोग करके किसी सूची में जोड़ सकते हैं ++
, जबकि :::
आप केवल सूची को संक्षिप्त कर सकते हैं।
:::
एक उपसर्ग ऑपरेटर है जो सभी तरीकों से शुरू होता है: