पर विचार करें निम्नलिखित बकवास लैम्ब्डा:एफ # पैटर्न मिलान विषमता
function
| [] -> "Empty list"
| hd::tl -> "Not so empty list"
यह ठीक काम करता है। अब मैं इसे फिर से लिखने इस प्रकार है:
function
| [] -> "Empty list"
| hd::tl & l -> "Not so empty list"
फिर, बकवास कारणों के लिए (और मुझे पता है कि मैं &
के बजाय as
, उपयोग करके एक ही प्रभाव को प्राप्त कर सकते हैं लेकिन यह सब एक कोड गोल्फ समस्या है कि के साथ क्या करना इस सवाल से संबंधित नहीं है)। अब एफ # कंपाइलर मुझे बताता है:
चेतावनी FS0025: इस अभिव्यक्ति पर अपूर्ण पैटर्न मिलान। उदाहरण के लिए, मान '[]' पैटर्न (ओं) द्वारा कवर न किए गए मामले को इंगित कर सकता है।
यह कोई समझ नहीं आता है - मैं स्पष्ट रूप से पहले नियम में []
के मामले को संभालने में सक्षम हूं। मैं नहीं देखता कि []
के संबंध में पहले फ़ंक्शन से दूसरे में क्या बदल गया है; न तो फ़ंक्शन का दूसरा नियम मेल खाता होगा, फिर भी दूसरा फ़ंक्शन चेतावनी देता है। मैंने जो कुछ किया वह एक अतिरिक्त पैटर्न जोड़ता था जो से मेल खाता है।
बेशक, एक खाली सूची के साथ दूसरे समारोह का आह्वान सफल होता है।
क्या कोई वैध कारण है कि यह चेतावनी क्यों हुई, या F # पैटर्न सत्यापन में कुछ quirks है? मैं इस तरह के कुछ मामलों को देख सकता था जब अधिक उन्नत पैटर्न नियोजित होते हैं, लेकिन यह एक सुंदर मूल जैसा लगता है। यहां तक कि अगर समस्या को हल नहीं किया जा सकता है, तो ऐसा लगता है कि इस प्रकार का मामला संकलक में विशेष हैंडलिंग की योग्यता के लिए पर्याप्त होगा।
मैंने कभी भी इस तरह से उपयोग नहीं किया है। क्या आप कुछ दस्तावेज से लिंक कर सकते हैं जो करता है? – JaredPar
@ जेरेडपार - यहां देखें और पैटर्न http://msdn.microsoft.com/en-us/library/dd547125.aspx। असल में इसका मतलब है कि आप एक ही समय में सिर, पूंछ और पूरी सूची प्राप्त कर सकते हैं –