फ़ंक्शन संस्करण विशेष मामले में पूर्ण मैच सिंटैक्स के लिए एक छोटा हाथ है जहां मैच स्टेटमेंट पूरे फ़ंक्शन है और फ़ंक्शन में केवल एक ही तर्क है (एक के रूप में ट्यूपल्स की गिनती)। यदि आप दो तर्क रखना चाहते हैं तो आपको पूर्ण मिलान वाक्यविन्यास * का उपयोग करने की आवश्यकता है। आप इसे निम्नलिखित दो कार्यों के प्रकारों में देख सकते हैं।
//val match_test : string -> string -> string
let match_test x y = match x, y with
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"
//val function_test : string * string -> string
let function_test = function
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"
जैसा कि आप देख सकते हैं कि मैच संस्करण दो अलग-अलग तर्क लेता है, जबकि फ़ंक्शन संस्करण एकल टैप किए गए तर्क लेता है। जब से मुझे फ़ंक्शन सिंटैक्स क्लीनर दिखता है, तब से मैं सबसे अधिक तर्क कार्यों के लिए फ़ंक्शन संस्करण का उपयोग करता हूं।
* यदि आप वास्तव में चाहते थे कि आपको फ़ंक्शन संस्करण सही प्रकार के हस्ताक्षर मिल सकें, लेकिन यह मेरी राय में बहुत बदसूरत लगता है - नीचे उदाहरण देखें।
//val function_match_equivalent : string -> string -> string
let function_match_equivalent x y = (x, y) |> function
| "A", _ -> "Hello A"
| _, "B" -> "Hello B"
| _ -> "Hello ??"