इस कोड OCaml के साथ ही एफ # में ठीक संकलित:यह एफ #/ओकैमल "मैच" अभिव्यक्ति संकलित क्यों करता है?
let testmatch k =
match k with
| jqk3jtl23jtlk123 -> true
मैं दोनों FSI और utop में परीक्षण किया है। यह हमेशा true
देता है।
jqk3jtl23jtlk123
पूरी तरह से यादृच्छिक है, और इसका प्रकार 'a
के रूप में अनुमानित है। यहां तक कि अगर मैं एक डेटाप्रकार साथ k
विवश (जैसे let testmatch (k: int) =
) यह संकलित (जाहिर है int -> bool
बजाय 'a -> bool
करने के लिए testmatch
के प्रकार बाधित हालांकि
कोई समझा सकते हैं कृपया क्या हो रहा है विशेष रूप से:।?
- क्यों करता है संकलक स्वीकार एक पूरी तरह से यादृच्छिक शाब्दिक
jqk3jtl23jtlk123
? - कारण है कि मैं नहीं एक inexhaustive मैच चेतावनी मिलता है?
- मैच वास्तव में कर रही है? क्या है
आप मान 'jqk3jtl23jtlk123' के खिलाफ मिलान नहीं कर रहे हैं आपको लगता है कि जो कुछ भी मेल खाता है' k' है 'jqk3jtl23jtlk123' नाम के एक मूल्य बना रहे हैं के बराबर है। – Marth
इन भाषाओं में आप आमतौर पर एक मूल्य अभिव्यक्ति या पैटर्न मिलान अभिव्यक्ति में होते हैं, और ये दोनों अलग-अलग व्यवहार करते हैं। पैटर्न मिलान 'मिलान' के बाद होता है, 'फ़ंक्शन' के बाद, और किसी भी फ़ंक्शन/विधि पैरामीटर में होता है। – TheQuickBrownFox