F#
प्रकार और मॉड्यूल एक्सटेंशन
खोज…
टिप्पणियों
सभी मामलों में जब प्रकार और मॉड्यूल का विस्तार होता है, तो उस कोड को कॉल करने से पहले जोड़ा / लोड किया जाना चाहिए। संबंधित नामस्थान खोलने / आयात करके इसे कॉलिंग कोड के लिए भी उपलब्ध कराया जाना चाहिए।
मौजूदा प्रकारों में नए तरीके / गुण जोड़ना
एफ # कार्यों को "सदस्यों" के रूप में तब परिभाषित किया जाता है जब उन्हें परिभाषित किया जाता है (उदाहरण के लिए, रिकॉर्ड प्रकार )। हालाँकि 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"