2012-04-12 18 views
9

Scala for the impatient से निम्नलिखित स्निपेट को चलाने के लिए प्रयास करते समय:गुम पैरामीटर प्रकार

val b = ArrayBuffer(1,7,2,9) 
val bSorted = b.sorted(_ < _) 

मैं निम्नलिखित त्रुटि मिलती है:

error: missing parameter type for expanded function ((x$1, x$2) => x$1.$less(x$2)) 
     val bSorted = b.sorted(_ < _) 

किसी व्याख्या कर सकते हैं कि क्या हो रहा हो सकता है यहाँ। पैरामीटर प्रकार को ArrayBuffer की सामग्री से अनुमानित नहीं किया जाना चाहिए या क्या मुझे इसे स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है?

धन्यवाद

उत्तर

15

.sorted प्रकार Ordering का एक अंतर्निहित पैरामीटर (जावा Comparator के समान) लेता है। पूर्णांक के लिए, संकलक आप के लिए सही उदाहरण प्रदान करेगा:

scala> b.sorted 
res0: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 7, 9) 

आप एक तुलना समारोह पारित करने के लिए चाहते हैं, sortWith का उपयोग करें:

scala> b.sortWith(_ < _) 
res2: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 7, 9) 

scala> b.sortWith(_ > _) 
res3: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(9, 7, 2, 1) 

हालांकि, ध्यान देना हालांकि ArrayBuffer परिवर्तनशील है, दोनों सॉर्ट विधियों को प्रतिलिपि बनाई गई प्रतिलिपि वापस कर दी जाएगी, लेकिन मूल को छुआ नहीं जाएगा।

+0

धन्यवाद। समझ में आता है। –

+0

तो क्या इसका मतलब यह है कि पुस्तक में कोई त्रुटि है? या किसी बिंदु पर एक तुलना समारोह ले लिया? –

+0

मुझे लगता है कि यह पुस्तक में एक त्रुटि है। शायद एक अलग स्कैला संस्करण? – paradigmatic

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