2015-06-22 7 views
9

मैं (अनजाने में) पैटर्न पैटर्न मिलान वाक्य के कुछ हिस्सों में आया था, मुझे संकलन करने की उम्मीद नहीं थी और अब यह पता नहीं लगाया जा सकता है।स्कैला unapplySeq extractor वाक्यविन्यास

यह unapplySeq से संबंधित प्रतीत होता है।

नोट इस सरल उदाहरण में case x List(_,_) हिस्सा:

val xs = List(1, 2, 3)       //> xs : List[Int] = List(1, 2, 3) 

xs match { 
    case x List (_, _) => "yes" 
    case _    => "no" 
}            //> res0: String = yes 

मैं पैटर्न मैच वाक्य रचना में : या @ के लिए इस्तेमाल किया है, लेकिन इस बारे में उलझन में हूँ कर रहा हूँ। यह वाक्यविन्यास कैसे काम करता है और क्या (यदि कोई है) unapplySeq से इसका संबंध है?

नमूना स्काला 2.11.6 में मार डाला कोड

उत्तर

3

बराबर गैर इन्फ़िक्स संस्करण है:

xs match { 
    case List(x, _, _) => "yes" 
    case _    => "no" 
} 

Scala specification का कहना है:

एक इन्फ़िक्स आपरेशन पैटर्न पी; सेशन; क्यू कन्स्ट्रक्टर या एक्स्ट्रैक्टर पैटर्न सेशन (पी, क्यू) के लिए एक शॉर्टेंड है। पैटर्न में ऑपरेटरों की प्राथमिकता और सहयोगी अभिव्यक्तियों के समान ही है।

एक इंफिक्स ऑपरेशन पैटर्न पी; ओप; (क्यू 1, ..., क्यूएन) कन्स्ट्रक्टर या एक्सट्रैक्टर पैटर्न सेशन (पी, क्यू 1, ..., क्यूएन) के लिए एक शॉर्टेंड है।

+0

आप कहां बताते हैं कि कैसे मामला सूची (x, _, _) => "yes" 'केस x सूची (_, _) =>" yes "' के बराबर होगी? –

+0

इन्फिक्स ऑपरेटर नोटेशन वह जगह है जहां विधि ऑब्जेक्ट और पैरामीटर (या पैरामीटर) के बीच बैठती है। – bjfletcher

+0

मैंने सोचा था कि इन्फिक्स नोटेशन केवल 2 तर्कों के साथ कार्यों पर लागू होता है ?? स्रोत को देखते हुए, 'List.unapplySeq' को परिभाषित किया गया है' def unapplySeq [ए] (x: CC [ए]): कुछ [सीसी [ए]] = कुछ (x) ' –

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