मैं कुछ इस तरह लिखना चाहते भेदभाव। यहां तक कि निम्नलिखित में विफल रहता है:साझा मामलों यूनियनों
let getValue (nn : NumExp) = match nn with | Num(n) -> n
दोनों भेदभाव यूनियनों कि कार्यों के साथ काम करता है में एक ही मामले का उपयोग करने के लिए एक रास्ता है? डीयू परिभाषाएं स्वयं ठीक हैं।
मैं एक ही मामले का उपयोग करने के Exp
परिभाषा की तरह
type Exp =
| NumExpExp of NumExp
| Dot of NumExp * NumExp
| Op of string * Exp * Exp
अविवेक का एक स्तर जोड़ने से बचना चाहते हैं। मुझे लगता है कि मुझे यहां कुछ मूलभूत याद आ रही है।
कारण मैं NumExp
है कि मैं एक Dot
(बजाय 2 से तैरता) में 2 Exp
s 'प्लग' करने में सक्षम हो, क्योंकि यह भाव पैदा करने के लिए आसान बनाता है चाहते हैं, लेकिन वे किसी भी Exp
, बस संख्यात्मक नहीं किया जा सकता ।
संपादित: क्या मैं सच में जानना चाहता था कि क्या दो दस में दो मामलों (NumExp
"सहित" एक तरह से Exp
) की तरह एक ही इकाई के रूप में इलाज किया जा सकता है। मुझे अब पता है Exp.Num
और NumExp.Num
पूरी तरह से अलग इकाइयां हैं। टॉमस नीचे दो मामलों को भेदभाव का एक अच्छा तरीका प्रदान करता है। इस प्रकार दिखाई देगा
let getValue (NumExp.Num(n)) = n
एक और पूरी उदाहरण:
धन्यवाद टॉमस, असंबद्ध चमत्कार काम करता है। मैं क्या पूछ रहा था, हालांकि 'दो डीयू में दो मामलों को एक ही इकाई के रूप में माना जा सकता है?', या दूसरे शब्दों में, 'एक्सप एक्सप "में" न्यूमएक्सपी "शामिल है। लेकिन आपके उत्तर से, जवाब नहीं है। धन्यवाद! – Mau
@ माउ: मैंने विभिन्न भेदभाव वाले संघों के बीच मामलों को साझा करने के बारे में कुछ जानकारी जोड़ा। यह संभव नहीं है, लेकिन आप एक दूसरे को शामिल कर सकते हैं। –
धन्यवाद, यह वही है जो मैंने किया था :-) – Mau