में गणना प्रकारों को विस्तृत करें F # सुविधा से संबंधित एक अन्य प्रश्न "Type extensions" कहा जाता है।F #
एफ # में गणनाओं को विस्तारित करना असंभव प्रतीत होता है। मैं enums देने के लिए C# Extensions Methods एक बहुत का उपयोग करें: सीमा मान्यता तर्क जोड़ने के लिए, विधि है कि स्ट्रिंग प्रतिनिधित्व रिटर्न आदि
दुर्भाग्य से यह आसान enumerations विस्तार करने के लिए केवल भेदभाव संघ लेकिन असंभव का विस्तार संभव लगता है:
1. आंतरिक विस्तार
// CustomEnum.fs
module CustomEnumModule
type CustomEnum =
| Value1 = 1
| Value2 = 2
// Trying to split definition of the enum
type CustomEnum with
| Value3 = 3
त्रुटि: "त्रुटि FS0010: अप्रत्याशित प्रतीक '|' सदस्य परिभाषा "
2. वैकल्पिक विस्तार
// CustomEnumEx.fs
open CustomEnumModule
type CustomEnum with
member public x.PrintValue() =
printfn "%A" x
त्रुटि:" त्रुटि FS0896: Enumerations सदस्य नहीं हो सकते "
यह अजीब मेरे लिए लगता है क्योंकि (1) हम कर सकते हैं पूर्ण-विशेषीकृत भेदभाव वाले संघ के विशेष मामले के रूप में सरल गणनाओं का इलाज करें और हम भेदभाव वाले यूनियनों का विस्तार कर सकते हैं और (2) विस्तारित .NET enums कुछ विशेषताओं को जोड़ने का एक अच्छा तरीका है (inclu डिंग एफपी-फीचर्स) मौजूदा बुनियादी ढांचे के लिए।
क्या यह व्यवहार जानबूझकर है या यह कार्यान्वयन में सरल बग है?
पीएस दुर्भाग्यवश F# Spec इस संबंध में चुप है, या कम से कम मुझे एक या दूसरे व्यवहार के लिए कोई सबूत नहीं मिल रहा है।
पर Hubfs (उर्फ FPish) कुछ समय के लिए एक समान प्रश्न हुई थी: [एक्सटेंशन विधि Enum पर अनुमति नहीं है?] (http://cs.hubfs.net/topic/None/59784) जो बताता है कि यह संभव नहीं है और डिज़ाइन द्वारा –
लिंक के लिए धन्यवाद। और मैं मानता हूं कि यह ** डिजाइन ** द्वारा किया जा सकता है। मैं समझ नहीं पा रहा हूं कि इस फैसले के पीछे तर्क क्या है। –