मैं वर्तमान में एफ # और सामान्य रूप से कार्यात्मक प्रोग्रामिंग (सी # पृष्ठभूमि से) सीख रहा हूं और मेरे पास प्रोसेसिंग के दौरान .net सीएलआर ऑब्जेक्ट्स का उपयोग करने के बारे में एक सवाल है।आप एफ # में आसपास के .NET ऑब्जेक्ट मान कैसे पास करते हैं?
मेरी समस्या का वर्णन करने के लिए एक उदाहरण देने के लिए किया जाएगा सबसे अच्छा तरीका है:
let xml = new XmlDocument()
|> fun doc -> doc.Load("report.xml"); doc
let xsl = new XslCompiledTransform()
|> fun doc -> doc.Load("report.xsl"); doc
let transformedXml =
new MemoryStream()
|> fun mem -> xsl.Transform(xml.CreateNavigator(), null, mem); mem
इस कोड .net वस्तुओं का उपयोग कर एक XSLT दस्तावेज़ के साथ एक XML दस्तावेज बदल देती है। नोट XslCompiledTransform.Load किसी ऑब्जेक्ट पर काम करता है, और शून्य लौटाता है। इसके अलावा XslCompiledTransform.Transform को मेमोरीस्ट्रीम ऑब्जेक्ट की आवश्यकता होती है और शून्य लौटाती है।
उपरोक्त रणनीति का उपयोग ऑब्जेक्ट को अंत (एमएम) में एक मूल्य वापस करने और कार्यात्मक प्रोग्रामिंग कार्य करने के लिए जोड़ना है।
हम एक के बाद यह एक क्या करना चाहते हैं जब हम अंत में एक वापसी मान के साथ प्रत्येक पंक्ति पर एक समारोह है:
let myFunc =
new XmlDocument("doc")
|> fun a -> a.Load("report.xml"); a
|> fun a -> a.AppendChild(new XmlElement("Happy")); a
वहाँ एक और अधिक सही तरीका है (कार्यात्मक प्रोग्रामिंग के संदर्भ में) को संभालने के लिए .NET ऑब्जेक्ट्स और ऑब्जेक्ट्स जो अधिक ओओ पर्यावरण में बनाए गए थे?
जिस तरह से मैंने अंत में मूल्य वापस कर दिया था, उसके बाद इनलाइन कार्यों को हर जगह एक हैक की तरह लगता है और ऐसा करने का सही तरीका नहीं है।
किसी भी मदद की बहुत सराहना की जाती है!
महान प्रतिक्रिया के लिए धन्यवाद :) क्या मैं कोड डाल सकता हूं (आपके द्वारा लिखे गए दूसरे उदाहरण को कहें) सभी एक ही फ़ंक्शन में जो दस्तावेज़ ऑब्जेक्ट देता है? – Russell
हाँ, निश्चित रूप से! बाकी (अच्छे) कार्यात्मक कार्यक्रम से (बदसूरत) अनिवार्य बिट्स को छिपाने का यह सबसे अच्छा तरीका है। मैंने जवाब (पहला उदाहरण) संपादित किया, ताकि यह एक्सएसएल फाइलों का उपयोग कर एक्सएमएल फाइलों को बदलने के लिए एक सरल कार्य दिखाता है। –
विस्तृत उदाहरण और स्पष्टीकरण के लिए उत्कृष्ट धन्यवाद! :) – Russell