2010-07-29 14 views
5

मैं एक पॉलीमोर्फिक फ़ंक्शन लिखने की कोशिश कर रहा हूं, जिसे पैरामीटर के प्रकार के आधार पर थोड़ा अलग करने की आवश्यकता है। क्या कोई तरीका है कि मैं बिल्टिन प्रकारों का उपयोग करके ऑब्जेक्ट के प्रकार पर पैटर्न मिलान कर सकता हूं? मैं इन पंक्तियों के साथ कुछ सोच रहा हूं:बिल्टिन प्रकारों पर OCaml पैटर्न मिलान

let to_string v = 
    match v with 
    | string -> v 
    | int -> string_of_int v 
    | _ -> "" 

लेकिन यह मान्य ओकैमल प्रोग्राम प्रतीत नहीं होता है।

मैंने this question देखा है, लेकिन यह मेरे प्रश्न का काफी जवाब नहीं देता है। मैं इस के लिए नए प्रकार बनाने के बजाय मानक, बिल्टिन प्रकारों का उपयोग करने के लिए पसंद करूंगा (हालांकि मैं ऐसा कर सकता हूं यदि यह एकमात्र तरीका है)।

उत्तर

3

असल में यह जवाब पूरी तरह से आपके लिए लागू होता है। आप केवल एक प्रकार की कक्षा से मेल खाते हैं, और int, string, float के संघ द्वारा परिभाषित प्रकार, ... मौजूद नहीं है, और इसे बनाने की आवश्यकता है (जैसा कि पिछले उत्तर में है)। 'a किसी विशेष प्रकार पर कार्य करता है, लेकिन सभी प्रकार के संघ का प्रतिनिधित्व नहीं करता है।

आप क्या आप एक बाहरी सी समारोह (18.3) का उपयोग करना चाहते हैं करने में सक्षम हो सकता है, हालांकि, परमाणु टैग खंड पर एक नज़र में, मुझे यकीन है कि आप char और int अंतर करने के लिए सक्षम हो जाएगा नहीं कर रहा हूँ।

+0

:(- मुझे यही डर था। ओह ठीक है, मुझे लगता है कि मेरा कार्यक्रम सिर्फ उतना अच्छा नहीं लगेगा। –

+0

आप ऐसा कुछ करने की कोशिश क्यों कर रहे हैं? शायद एक बेहतर तरीका है। – nlucaroni

+0

मैंने सोचा मैं इस तरह से एक पॉलिमॉर्फिक फ़ंक्शन लिखने में सक्षम हूं, जिसकी मुझे आवश्यकता है, अलग-अलग प्रकार के लिए ओवरराइड के साथ, लेकिन इसे और अधिक सोचने के लिए, मुझे शायद वैसे भी भिन्नताओं का उपयोग करने की आवश्यकता होगी, क्योंकि मैं एक लेक्सिंग चरण भी समाप्त कर दूंगा। –

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