टी एल; डॉ: एफ # संकलक int
operator के रूप में इस संदर्भ में int
व्याख्या determined by Eugene Fotin और expanded upon by Gene Belitski के रूप में। सबसे अच्छा कामकाज System.Int32.MaxValue
या नीचे वर्णित एक अद्वितीय प्रकार उपनाम का उपयोग करना है।एफ # int.MaxValue "मान्य निरंतर अभिव्यक्ति नहीं है," लेकिन System.Int32.MaxValue है?
निम्नलिखित रिकॉर्ड प्रकार पर विचार करें:
type User = {
Username : string
}
मैं Username
कम से कम तीन अक्षर लंबा होना चाहते हैं, तो मैं StringLength
विशेषता का उपयोग। कोई अधिकतम लंबाई है, इसलिए मैं यह int.MaxValue
करने के लिए सेट: अगर मैं System.Int32
बजाय का उपयोग
This is not a valid constant expression or custom attribute value.
सब कुछ विलक्षण है:
type User = {
[<StringLength(int.MaxValue, MinimumLength=3)>]
Username : string
}
यह मैं निम्नलिखित त्रुटि देता है
type User = {
[<StringLength(System.Int32.MaxValue, MinimumLength=3)>]
Username : string
}
यह भी संकलित करता है अगर मैं int
:
type User = {
[<StringLength(num.MaxValue, MinimumLength=3)>]
Username : string
}
and num = int
या पूरी तरह से प्रकार अर्हता:
type User = {
[<StringLength(Microsoft.FSharp.Core.int.MaxValue, MinimumLength=3)>]
Username : string
}
मैं एफ # स्रोत और int
is defined exactly as you would expect में जाँच:
type int32 = System.Int32
// Then, a few lines later…
type int = int32
क्या हो रहा है? मैंने माना कि एफ # आदिम प्रकार अन्य संदर्भों के साथ अन्य संदर्भों के साथ अंतर-परिवर्तनीय थे, लेकिन ऐसा लगता है कि मेरे मानसिक मॉडल से कुछ गुम है।
आप सही हैं, यही चल रहा है। मुझे आश्चर्य है कि ऐसा क्यों है? एफ # व्याकरण में कुछ, मुझे लगता है? –