मुझे नहीं लगता कि पहले फंक्शन को कॉल करने का एक समझदार तरीका है यदि दो ओवरलोड किए गए फ़ंक्शंस केवल वैकल्पिक पैरामीटर से भिन्न होते हैं। जैसा कि टिप्पणियों में बताया गया है, इसका उपयोग शायद एक खराब डिजाइन है और आपको पैरामीटर का नाम बदलना चाहिए।
त्रुटि FS0041: विधि 'समारोह' कर सकता है के लिए एक अद्वितीय अधिभार
आप शायद देखा के रूप में, जब आप MyClass().func("A","B")
का उपयोग कर एक साधारण तरीके से समारोह से कॉल करके, आप अस्पष्टता के बारे में शिकायत एक त्रुटि संदेश मिलता इस कार्यक्रम बिंदु से पहले प्रकार की जानकारी के आधार पर निर्धारित नहीं किया जाना चाहिए। एक प्रकार की टिप्पणी की आवश्यकता हो सकती है। उम्मीदवारों: सदस्य MyClass.func: एक: स्ट्रिंग * ख: स्ट्रिंग -> स्ट्रिंग, सदस्य MyClass.func: एक: स्ट्रिंग * ख: स्ट्रिंग -> स्ट्रिंग
आप दूसरे अधिभार स्पष्ट रूप से दो तरह से कॉल कर सकते हैं (?b
के साथ या बिना) तथ्य यह है कि आप स्पष्ट रूप से एक वैकल्पिक तर्क के लिए Some
मूल्य प्रदान कर सकते हैं करने के लिए धन्यवाद:
MyClass().func("A")
MyClass().func("A",?b=Some "B")
जिज्ञासा से बाहर
, यह पता चला है कि आप एक स्थिर सदस्य बाधा के माध्यम से पहले अधिभार कॉल कर सकते हैं। यह काफी बदसूरत है और आप शायद यह नहीं करना चाहिए, लेकिन यह पहला अधिभार कॉल:
let inline callFunc (o:^T) a b =
(^T : (member func : string * string -> string) (o, a, b))
callFunc (MyClass()) "A" "B"
स्रोत
2017-04-12 12:37:33
आप बस किसी भी समारोह में दूसरा पैरामीटर नाम बदल सकते हैं: 'प्रकार MyClass() = सदस्य this.func (क : स्ट्रिंग, बी: स्ट्रिंग) = "func (a, b)" सदस्य this.func (a: string,? c: string) = "func (a,? c)" परीक्षण = MyClass() arg1 = "2" दें arg2 = "12" test.func (arg1, b = arg2) |> printfn "% s" // func (a, b) test.func (arg1, c = arg2) |> printfn "% s" // func (a,? c) ' –