2010-12-30 8 views
7

मैं की तरह इस (सी #) सामान्य कोड के पुनर्लेखन के लिए कोशिश कर रहा हूँ एफ # में कोड पुनर्लेखन:कुछ सी # सामान्य

U Upcast<T, U>(T x) where T : U { return x; } 

एफ # में:

let ucast<'T, 'U when 'T :> 'U> (x: 'T) = x :> 'U 

लेकिन एफ # बाधा को हल करने की तुलना में सी # अलग काम करता है और

त्रुटि FS0698: अमान्य बाधा: संकलक टाइपिंग त्रुटियों की एक गुच्छा आउटपुट बाधा के लिए इस्तेमाल किया प्रकार बंद है, जो बाधा केवल ज़्यादा से ज़्यादा एक समाधान से संतुष्ट किया जा सकता है इसका मतलब है

चेतावनी FS0064: यह निर्माण कम सामान्य होने के कोड का कारण बनता है प्रकार एनोटेशन ने संकेत से । प्रकार परिवर्तनीय 'टी प्रकार' यू 'होने के लिए बाध्य किया गया है।

त्रुटि FS0663: इस प्रकार पैरामीटर एक तरीका है कि यह रोकें हमेशा होने के लिए '' यू '

त्रुटि FS0013 में इस्तेमाल किया गया: प्रकार से स्थिर बलात्कार' यू करने के लिए 'यू
इस प्रोग्राम से पहले बिंदु से पहले जानकारी पर एक अनिश्चित प्रकार आधारित शामिल है। स्थिर प्रकार कुछ प्रकारों पर अनुमत नहीं हैं। आगे के प्रकार एनोटेशन की आवश्यकता है।

त्रुटि FS0661: एक या स्पष्ट वर्ग या समारोह प्रकार के और अधिक इस बंधन के लिए चर, सामान्यीकृत नहीं किया जा सकता है, क्योंकि वे थे अन्य प्रकार

कृपया करने के लिए विवश, मुझे स्पष्ट करने दें उपरोक्त सी # कोड को सही ढंग से फिर से लिखने के लिए और मैंने जो एफ # संस्करण लिखा है वह संकलित नहीं है।

उत्तर

3

यह संकलक प्रतिबंध है। बाधा का सही प्रकार 'ए:>' बी गैर सामान्य प्रकार का होना चाहिए।

6

आप इसके लिए एक प्रकार-सुरक्षित कार्य नहीं लिख सकते हैं। हालांकि, आप अपने फ़ंक्शन के बजाय upcast ऑपरेटर का उपयोग कर सकते हैं।

संबंधित मुद्दे