इस मूल्य प्रतिबंध कहा जाता है के कारण है कि एफ # के पहलू जोड़ सकते हैं। आप देख सकते हैं कि यदि आप एफ # इंटरएक्टिव करने के लिए सिर्फ दो let
घोषणाओं में प्रवेश (ताकि संकलक पहला प्रयोग से प्रकार का अनुमान लगा नहीं करता है):
> let builder = new System.Text.StringBuilder()
let append = Printf.bprintf builder ;;
त्रुटि FS0030: मान प्रतिबंध। मूल्य 'एपेंड' का अनुमान जेनेरिक प्रकार वैल एपेंड: ('_a ->' _b) होने पर अनुमानित किया गया है: '_a:> Printf.BuilderFormat <' _b> या तो तर्क 'स्पष्ट' करने के लिए तर्क दें या यदि आप के लिए सामान्य होने का इरादा नहीं है, एक प्रकार की एनोटेशन जोड़ें।
एफ # टीम से excellent article by Dmitry Lomov है जो इसे विस्तार से बताता है। जैसा कि लेख से पता चलता है, एक समाधान स्पष्ट प्रकार पैरामीटर घोषणा जोड़ने के लिए है:
let builder = new System.Text.StringBuilder()
let append<'T> : Printf.BuilderFormat<'T> -> 'T = Printf.bprintf builder
append "%i" 10
append "%s" "Hello"
यह ठीक काम करेगा।
स्रोत
2010-10-28 21:35:03
धन्यवाद। क्या कोई यह समझा सकता है कि यह क्यों काम करता है और आंशिक आवेदन नहीं करता है? – Daniel
क्योंकि .NET में, फ़ंक्शन सामान्य हो सकते हैं और चर नहीं कर सकते हैं। 'फ़ंक्शन का वर्णन करें =' फ़ंक्शन का वर्णन करता है; 'एपेंड =' एक चर का वर्णन करते हैं। –