2010-02-05 18 views
9

क्या आपके स्वयं के ऑपरेटरों को एफ # में परिभाषित करने का कोई तरीका है?क्या आप अपने स्वयं के ऑपरेटरों को एफ # में परिभाषित कर सकते हैं?

यदि ऐसा है तो किसी ने मुझे इस के लिए एक उदाहरण दे सकते हैं? मैंने संक्षेप में खोज की, लेकिन कुछ भी नहीं मिला।

+0

आपके भविष्य के संदर्भ जोन के लिए - अवधारणा को ऑपरेटर ओवरलोडिंग कहा जाता है। यदि आप Google F # और ऑपरेटर ओवरलोडिंग करते हैं तो आपको इस विषय पर काफी कुछ मिल जाएगा। –

+0

धन्यवाद, भविष्य में ऐसा करेंगे। –

उत्तर

25

हाँ:

let (+.) x s = [for y in s -> x + y] 
let s = 1 +. [2;3;4] 

अक्षर हैं जो एक एफ # ऑपरेटर में इस्तेमाल किया जा सकता section 3.7 of the spec में सूचीबद्ध हैं। वे !%&*+-./<=>@^|~ और पहले के बाद किसी भी चरित्र के लिए ? हैं। प्राथमिकता और स्थिरता ऑपरेटर के पहले चरित्र द्वारा निर्धारित की जाती है (कल्पना देखें)।

आप अपनी खुद की जाने बाध्य ऑपरेटरों बना सकते हैं के रूप में मैं ऊपर किया है, जो मामले में वे जैसे जाने-बाउंड कार्यों काम करते हैं। तुम भी एक प्रकार पर सदस्यों के रूप में उन्हें परिभाषित कर सकते हैं:

type 'a Wrapper = Wrapper of 'a with 
    static member (+!)(Wrapper(x), Wrapper(y)) = Wrapper(x+y) 

let w = (Wrapper 1) +! (Wrapper 2) 

इस मामले में, आप पहले से परिभाषित किया है करने के लिए एक जाने-बाउंड समारोह ऑपरेटर का उपयोग करने की जरूरत नहीं है; एफ # इसे इस प्रकार मिलेगा। आप इस इनलाइन परिभाषाओं का उपयोग करने का विशेष रूप से अच्छा लाभ ले सकते हैं:

let inline addSpecial a b = a +! b 
let w2 = addSpecial w (Wrapper 3) 

इस आगे भी ले रहा है, तो आप इनलाइन साथ ही अपने प्रकार पर ऑपरेटरों कर सकते हैं, ताकि आप उन्हें के उदाहरणों के एक और भी व्यापक विविधता पर उपयोग कर सकते हैं आपकी कक्षा:

type 'a Wrapper = Wrapper of 'a with 
    static member inline (+!)(Wrapper(x), Wrapper(y)) = Wrapper(x+y) 

let wi = (Wrapper 1) +! (Wrapper 2) 
let wf = (Wrapper 1.0) +! (Wrapper 2.0) 
let wi2 = addSpecial wi wi 
let wf2 = addSpecial wf wf 
+3

सेक्शन 4.4 (http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html) में इन्फिक्स ऑपरेटरों के बारे में कुछ और जानकारी है और कौन से वर्ण स्वीकार्य हैं। – nlucaroni

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

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