यह मेरे लिए अभी हुआ, कि एफ # जेनेरिक स्थिर मानों को "टेम्पलेट पैरामीटर" के रूप में स्वीकार नहीं करते हैं।निरंतर "टेम्पलेट तर्क" के साथ कोई एफ # जेनरिक नहीं?
मान लीजिए कि कोई RangedInt
टाइप करना चाहता था, तो यह एक int की तरह व्यवहार करता है लेकिन केवल पूर्णांक मानों की उप-श्रेणी को ही गारंटी देता है।
एक संभावित दृष्टिकोण एक साथ भेदभाव संघ, के समान हो सकता है:
type RangedInt = | Valid of int | Invalid
लेकिन यह या तो काम नहीं कर रहा, के रूप में वहाँ कोई "प्रकार रेंज जानकारी के विशिष्ट भंडारण" है। और रेंज अलग होने पर 2 रेंज किए गए उदाहरण अलग-अलग प्रकार के होने चाहिए।
होने के नाते अभी भी एक सा सी ++ पीड़ित इसे करने के लिए समान दिखेगा:
template<int low,int high>
class RangedInteger { ... };
अब सवाल है, उत्पन्न होने वाली है दो गुना:
- क्या मैं मौजूद एफ # जेनरिक के लिए कुछ और निरंतर मूल्यों को याद?
- यदि मुझे यह याद नहीं आया, तो F # में ऐसे
RangedInt<int,int>
को पूरा करने का बेवकूफ तरीका क्या होगा?
Tomas Petricek's blog about custom numeric types पाया करने के बाद, कि ब्लॉग लेख के लिए मेरे सवाल के बराबर होगा: क्या होगा यदि वह एक IntegerZ5
लेकिन एक IntegerZn<int>
कस्टम प्रकार परिवार नहीं किया?
असल में, मैंने कल कुछ समय पर निर्भर प्रकारों पर खर्च किया और एटीएस नामक एमएल-उत्परिवर्तन पाया (हालांकि इसे चलाना नहीं था)। इसका विचार है कि तर्कसंगत प्रोग्रामिंग और संकलन समय पर हल करने वाली भाषा हो, ताकि लोग अपने कोड के लिए सबूत लिख सकें - जिन्हें कोड को सत्यापित करने के बाद संकलित समय पर हटाया जा रहा है। मेरा एफ # विचार मूल रूप से था: आधुनिक मुख्यधारा की भाषा का उपयोग करके मैं उस दिशा में कितनी दूर जा सकता हूं? – BitTickler