2013-03-04 12 views
9

स्काला अनुक्रम प्रकार के संस्करण 2.10 से पहले एक प्रकार से दूसरे में परिवर्तित करने के लिए toList और toArray तरह के तरीकों की थी। स्कैला 2.10 के रूप में हमारे पास to[_] है, उदा। to[List], जो toList और दोस्तों के नियम के अंतर्गत है और यह भी हमें Vector की तरह नए प्रकार में बदल जाएंगे और शायद भी हमारे अपने संग्रह प्रकार के लिए करने की क्षमता देने के लिए प्रकट होता है। और निश्चित रूप से यह आपको एक प्रकार में परिवर्तित करने की क्षमता देता है जिसे आप केवल एक प्रकार पैरामीटर के रूप में जानते हैं, उदा। to[A] - अच्छा!क्यों नहीं हैं और दोस्तों को बहिष्कृत किया गया है?

लेकिन पुराने तरीकों को पदावनत नहीं कर रहे थे? क्या वे तेज़ हैं? क्या ऐसे मामले हैं जहां toList काम करता है लेकिन to[List] नहीं है? क्या हम एक दूसरे को पसंद करते हैं जहां दोनों काम करते हैं?

उत्तर

7

toListTraversableOnce में to[List] के रूप में लागू किया गया है, इसलिए कोई उल्लेखनीय प्रदर्शन अंतर नहीं होगा।

हालांकि, toArray बाद पहले एक सरणी बनाता है और फिर आकार संकेत सेट (के रूप में यह हर लक्ष्य संग्रह प्रकार के लिए करता है), जबकि के रूप में पूर्व सही आकार की एक सरणी आवंटित करता है (बहुत थोड़ा) to[Array] तुलना में अधिक कुशल। इससे वास्तविक एप्लिकेशन में कोई फर्क नहीं पड़ता है जब तक आप एक तंग पाश में डेटा को सरणी में परिवर्तित नहीं कर लेते।

वर्ष विधियां आसानी से पदावनत किया जा सकता है, और मुझे यकीन है कि वे भविष्य में होगा, लेकिन लोगों को इतना है कि उन्हें बहिष्कृत अभी शायद कुछ लोगों को गुस्सा होगा उन्हें करने के लिए इस्तेमाल कर रहे हैं।

+3

'toXXX' आसानी से ओवरराइट किया जा सकता है जैसे कि यह [' toList'] (https के लिए मामला है: // github.com/scala/scala/blob/v2.10.0/src/library/scala/collection/immutable/List.scala#L196), न केवल 'toArray' के लिए। – sschaef

+0

दरअसल, ओवरराइट और विशेष केस 'to' से अधिक आसान है। –

+1

Ummm, शमूएल, तो आप बहुत युवा देखो - अपनी माँ आप स्काला संग्रह स्रोत कोड को देख रहे हैं पता है? – AmigoNico

2

मुद्दे पर होना करने के लिए है कि आप पोस्टफ़िक्स अंकन में [] करने के लिए उपयोग नहीं कर सकते लगता है:

scala> Array(1,2) toList 
res2: List[Int] = List(1, 2) 

scala> Array(1,2) to[List] 
<console>:1: error: ';' expected but '[' found. 
     Array(1,2) to[List] 

scala> Array(1,2).to[List] 
res3: List[Int] = List(1, 2) 
+2

'xs toList' एक चेतावनी उत्पन्न करता है, उसे छुपाएं नहीं। – sschaef

+3

@sschaef: यदि आप 'आयात scala.language.postfixOps' नहीं करते हैं – BeniBela

संबंधित मुद्दे