2012-10-24 5 views
9

_._1 की मेरी व्याख्या है:स्कैला में _._ 1 और _ ++ _ का मतलब क्या है (दो अलग-अलग ऑपरेशन)?

_ = वाइल्डकार्ड पैरामीटर _1 = पहले पैरामीटर विधि पैरामीटर सूची लेकिन जब . के साथ उपयोग किया यह क्या दर्शाता है में?

यह कैसे अपने प्रयोग किया जाता है:

.toList.sortWith(_._1 < _._1) 

इस बयान के लिए:

_++_ 

मैं हार रहा हूँ। क्या यह किसी भी तरह दो वाइल्डकार्ड पैरामीटर concatenation है? यह कैसे अपने प्रयोग किया जाता है:

.reduce(_++_) 

मैं, विशेष रूप से रुचि रखते अगर वे कोड ऊपर अधिक वर्बोज़ बनाया जा सकता है और किसी भी implicits को दूर किया जाएगा सिर्फ इसलिए मैं इसे बेहतर समझ सकते हैं?

उत्तर

10

_._1 वाइल्डकार्ड पैरामीटर _ पर विधि _1 विधि को कॉल करता है, जो टुपल का पहला तत्व प्राप्त करता है। इस प्रकार, sortWith(_._1 < _._1) उनके पहले तत्व द्वारा टुपल की सूची टाइप करता है।

_++_ विधि के रूप में दूसरे पैरामीटर के साथ पहले वाइल्डकार्ड पैरामीटर पर ++ विधि को कॉल करता है। ++ अनुक्रमों के लिए concatenation करता है। इस प्रकार .reduce(_++_) अनुक्रमों की एक सूची को एक साथ जोड़ता है। आमतौर पर आप इसके लिए flatten का उपयोग कर सकते हैं।

5

_1 एक विधि नाम है। विशेष रूप से टुपल्स में _1 नामक एक विधि होती है, जो टुपल का पहला तत्व देता है। तो _._1 < _._1 का अर्थ है "दोनों तर्कों पर _1 विधि को कॉल करें और जांचें कि पहले दूसरे से कम है या नहीं।"

और हाँ, _++_ दोनों तर्कों को समेकित करता है (माना जाता है कि पहले तर्क में ++ विधि है जो concatenation करता है)।

3
.reduce(_++_) 

वास्तव में सिर्फ है:

.reduce{ (acc, n) => acC++ n } 
संबंधित मुद्दे