खोज…


टिप्पणियों

सभी मामलों में जब प्रकार और मॉड्यूल का विस्तार होता है, तो उस कोड को कॉल करने से पहले जोड़ा / लोड किया जाना चाहिए। संबंधित नामस्थान खोलने / आयात करके इसे कॉलिंग कोड के लिए भी उपलब्ध कराया जाना चाहिए।

मौजूदा प्रकारों में नए तरीके / गुण जोड़ना

एफ # कार्यों को "सदस्यों" के रूप में तब परिभाषित किया जाता है जब उन्हें परिभाषित किया जाता है (उदाहरण के लिए, रिकॉर्ड प्रकार )। हालाँकि F # भी नए उदाहरण के सदस्यों को मौजूदा प्रकारों में जोड़े जाने की अनुमति देता है - यहां तक कि अन्य कहीं और अन्य .net भाषाओं में घोषित किए गए।

निम्नलिखित उदाहरण String सभी उदाहरणों के लिए एक नया उदाहरण विधि Duplicate जोड़ता है।

type System.String with
    member this.Duplicate times = 
        Array.init times (fun _ -> this)

ध्यान दें : this एक मनमाने ढंग से चुना गया चर नाम है जिसका उपयोग उस प्रकार के उदाहरण को संदर्भित करने के लिए किया जा रहा है जिसे x - x रूप में अच्छी तरह से काम करेगा, लेकिन शायद कम आत्म-वर्णन होगा।

इसे फिर निम्नलिखित तरीकों से बुलाया जा सकता है।

// F#-style call
let result1 = "Hi there!".Duplicate 3

// C#-style call
let result2 = "Hi there!".Duplicate(3)

// Both result in three "Hi there!" strings in an array

यह कार्यक्षमता C # में एक्सटेंशन विधियों के समान है।

नई संपत्तियों को मौजूदा प्रकारों में भी जोड़ा जा सकता है। यदि नया सदस्य कोई तर्क नहीं देता है तो वे स्वचालित रूप से गुण बन जाएंगे।

type System.String with
    member this.WordCount =
        ' ' // Space character
        |> Array.singleton
        |> fun xs -> this.Split(xs, StringSplitOptions.RemoveEmptyEntries)
        |> Array.length

let result = "This is an example".WordCount
// result is 4

मौजूदा प्रकारों में नए स्थैतिक कार्यों को जोड़ना

F # नए स्थिर कार्यों के साथ मौजूदा प्रकारों को विस्तारित करने की अनुमति दें।

type System.String with
    static member EqualsCaseInsensitive (a, b) = String.Equals(a, b, StringComparison.OrdinalIgnoreCase)

इस नए समारोह को इस तरह लागू किया जा सकता है:

let x = String.EqualsCaseInsensitive("abc", "aBc")
// result is True

इस विशेषता का मतलब यह हो सकता है कि कार्यों की "उपयोगिता" लाइब्रेरी बनाने के बजाय, उन्हें प्रासंगिक मौजूदा प्रकारों में जोड़ा जा सकता है। यह फ़ंक्शंस के और अधिक एफ # फ्रेंडली वर्जन बनाने के लिए उपयोगी हो सकता है जो क्यूरिंग जैसी सुविधाओं की अनुमति देता है।

type System.String with
    static member AreEqual comparer a b = System.String.Equals(a, b, comparer)

let caseInsensitiveEquals = String.AreEqual StringComparison.OrdinalIgnoreCase

let result = caseInsensitiveEquals "abc" "aBc"
// result is True

मौजूदा मॉड्यूल में नए कार्यों को जोड़ना और मॉड्यूल का उपयोग करना

मौजूदा मॉड्यूल और प्रकारों में नए कार्यों को जोड़ने के लिए मॉड्यूल का उपयोग किया जा सकता है।

namespace FSharp.Collections

module List =
    let pair item1 item2 = [ item1; item2 ]

नए फ़ंक्शन को तब बुलाया जा सकता है जैसे कि यह सूची का एक मूल सदस्य था।

open FSharp.Collections    

module Testing =
    let result = List.pair "a" "b"
    // result is a list containing "a" and "b"


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow