एफ # भेदभाव वाले संघ ओओ कक्षा पदानुक्रमों से काफी निकटता से मेल खाते हैं, इसलिए यह शायद सबसे अच्छा विकल्प है। सबसे उल्लेखनीय अंतर यह है कि आप प्रकार के घोषणापत्र को संशोधित किए बिना भेदभाव वाले संघ में नए मामले नहीं जोड़ सकते हैं। दूसरी ओर, आप आसानी से नए कार्यों को जोड़ सकते हैं जो प्रकार के साथ काम करते हैं (जो मोटे तौर पर सी # में नए आभासी तरीकों को जोड़ने के अनुरूप है)।
तो, यदि आप नई विरासत कक्षाओं (मामलों) को जोड़ने की उम्मीद नहीं करते हैं, तो यह सबसे अच्छा विकल्प है। अन्यथा, आप F # ऑब्जेक्ट प्रकार (या परिदृश्य के आधार पर अन्य विकल्प) का उपयोग कर सकते हैं। अपने कोड के बारे में
एक और बिंदु - जब से तुम नए मामले सामने नहीं जोड़ सकते, एफ # संकलक जानता है कि केवल मामलों की जरूरत B
और C
के लिए कर रहे हैं। नतीजतन, block_3
कभी नहीं मार डाला जा सकता है, जिसका अर्थ है कि आप बस लिख सकते हैं:
let my_fct x =
match x with
| B -> (block_1)
| C -> (block_2)
स्रोत
2011-09-07 12:44:01
मुझे लगता है कि यह ठीक है। सिवाय इसके कि आप गायब हैं; block_1 के बाद, block_2 और block_3 –
मेरी अज्ञानता क्षमा करें, लेकिन ऐसा लगता है कि 'block_3' को कभी भी F # स्निपेट में निष्पादित नहीं किया जा सकता है (बीजगणितीय डेटा प्रकार "बंद" हैं जहां तक मुझे पता है), तो यह क्यों है? साथ ही, क्या मैं अकेला सोच रहा हूं कि अनुवाद में बहुरूपता का उपयोग करना चाहिए? – delnan
आप ब्लॉक_3 के बारे में पूरी तरह से सही हैं। – Hugo