2010-05-21 7 views
9

Array के लिए map के स्रोत कोड है:क्यों स्काला में Array.map की परिभाषा करता है "नई त्रुटि फेंक()"

override def map[B](f: A => B): Array[B] = throw new Error() 

लेकिन निम्न काम करता है:

val name : Array[String]= new Array(1) 
name(0)="Oscar" 
val x = name.map { (s: String) => s.toUpperCase } 
// returns: x: Array[java.lang.String] = Array(OSCAR) 

उत्तर

14

आम तौर पर, जब आप लाइब्रेरी क्लास के स्रोत कोड में throw new Error() देखते हैं, तो यह उस बिंदु का प्रतिनिधित्व करता है जहां संकलक प्लेटफ़ॉर्म की सुविधा पर ब्रिजिंग करके विधि को हस्तक्षेप और कार्यान्वित कर रहा है (याद रखें कि यह जावा या .NET हो सकता है) ।

Array SID बताता है कि स्केल 2.7.x में सरणी का इलाज कैसे किया जाता है, और वे 2.8 में कैसे बदल गए हैं। अगर आप map कहलाते हैं तो संकलक को ऑब्जेक्ट को BoxedArray पर जादुई रूप से परिवर्तित करने के लिए उपयोग किया जाता है। अंतर्निहित रूपांतरण Array[T] से WrappedArray[T] या ArraySeq[T] को संदर्भ के आधार पर, और प्रकार Manifest[T] की अंतर्निहित मानकों के निर्माण का समर्थन करने के -

2.8 में, स्काला संग्रह ढांचे में सरणी के एकीकरण काफी हद तक सामान्य भाषाओं सुविधाओं के उपयोग के साथ नियंत्रित किया जाता है एक सामान्य प्रकार के arrays T। ऐरे indexing, length और update अभी भी throw new Error() के रूप में दिखाई देते हैं। Array#map अब मौजूद नहीं है, इसके बजाय आपको यह नियमित विधि के रूप में WrappedArray और ArraySeq पर मिलता है।

अद्यतन

आप इस संकलक जादू पता करने के लिए रुचि रखते परिभाषित किया गया है कर रहे हैं, Cleanup.scala की स्काला 2.8 अवतार पर एक नज़र डालें।

4

लग रहा है जैसे कि यह सिर्फ डमी कोड है, क्योंकि स्कैला सरणी वास्तव में जावा हैं।

+0

"मूल" के समान? जावा में, मेरा मतलब है, जैसे ... * अरे, चिंता न करें, मुझे पता है कि नीचे क्या करना है? * – OscarRyz

+0

यह मेरा अनुमान होगा, हालांकि मुझे यकीन नहीं है। – pdbartlett

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