2010-08-17 16 views
10

मैं स्पष्ट प्रकार पैरामीटर और बाधाओं के साथ ऑपरेटर परिभाषित करने के लिए कोशिश कर रहा हूँ ऑपरेटर में स्पष्ट प्रकार पैरामीटर:एफ #: बाध्यकारी

let inline (===)<'a, 'b 
    when 'a : not struct 
    and 'b : not struct> a b = obj.ReferenceEquals (a,b) 

यह एफ # 2.0 में अच्छी तरह से काम करता है, लेकिन उत्पादन करता है:

चेतावनी FS1189:
प्रकार पैरामीटर सीधे प्रकार के नाम के निकट रखा जाना चाहिए, उदाहरण के लिए "प्रकार सी < 'टी>", टाइप नहीं' सी < 'टी> "

तो ऑपरेटर परिभाषा के लिए स्पष्ट प्रकार तर्क विनिर्देश करने के लिए सही तरीका क्या है?

पेज। कृपया मुझे अंतर्निहित प्रकार के पैरामीटर और कुछ अन्य कामकाज के बारे में न बताएं, मैं इस मुद्दे को ठोस रूप से हल करना चाहता हूं।

उत्तर

12

कंपाइलर में एक बग का अर्थ है कि प्रतीकात्मक ऑपरेटरों को सीधे पैरामीटर टाइप करने के लिए निकट नहीं माना जाता है। आप उदाहरण के माध्यम से कामकाज कर सकते हैं | SomePatternName |) <'a, 'b> एक्स = x` `चलो (:;

let inline myeq<'a, 'b 
    when 'a : not struct 
    and 'b : not struct> a b = obj.ReferenceEquals (a,b) 

let inline (===) a b = myeq a b 
+1

इसके अलावा सक्रिय पैटर्न ही बग है – ControlFlow

4
let inline (===) (a : 'TA when 'TA : not struct) (b : 'TB when 'TB : not struct) = 
    obj.ReferenceEquals (a,b) 
+0

अच्छा है, लेकिन यह नहीं है स्पष्ट प्रकार पैरामीटर) – ControlFlow