एक नाम स्थान और F # में एक मॉड्यूल के बीच क्या अंतर है?


85

मैंने अभी F # सीखना शुरू किया है (.NET के साथ थोड़े पहले के अनुभव के साथ) इसलिए मुझे माफ कर दो कि शायद एक बहुत ही सरल प्रश्न है: F # में एक नाम स्थान और एक मॉड्यूल के बीच क्या अंतर है?

धन्यवाद

डेव

संपादित करें: उत्तर ब्रायन के लिए धन्यवाद। यही मैं जानना चाहता था। बस एक स्पष्टीकरण: क्या आप एक नामस्थान भी खोल सकते हैं (सी # के समान (कथन का उपयोग करके)?


4
और एक और ध्यान दें, जब आप सिस्टम की तरह एफ # में एक नाम स्थान खोलते हैं, तो आपको इसके उप नामस्थानों तक भी पहुंच मिलती है। इसलिए C # में, यदि आप सिस्टम खोलते हैं, तो भी आपको "System.IO.File" लिखना होगा। F # में, आप "IO.File" लिख सकते हैं। मुझे लगता है कि यह कोड को बहुत अच्छा बनाता है।
माइकलगैज

जवाबों:


93

एक नेमस्पेस एक .Net चीज है, जो कई औद्योगिक-ताकत वाली भाषाओं में आम है, बस फ्रेमवर्क को व्यवस्थित करने और विभिन्न पुस्तकालयों के बीच नामकरण संघर्ष से बचने का एक तरीका है। आप और मैं दोनों एक प्रकार "फू" को परिभाषित कर सकते हैं और एक परियोजना में दोनों का उपयोग कर सकते हैं, बशर्ते वे अलग-अलग नामस्थान (जैसे NS1.Foo और NS2.Foo) में हों। .Net में Namespaces के प्रकार होते हैं।

एक मॉड्यूल एक एफ # चीज है, यह मोटे तौर पर एक "स्थिर वर्ग" के अनुरूप है ... यह एक इकाई है जो लेट-बाउंड मान और फ़ंक्शंस को पकड़ सकती है, साथ ही प्रकार (ध्यान दें कि नाम स्थान में सीधे मान / फ़ंक्शन, नेमस्पेस नहीं हो सकते हैं) केवल प्रकार शामिल कर सकते हैं, जिसमें स्वयं मान और कार्य शामिल हो सकते हैं)। एक मॉड्यूल के अंदर की चीजों को "ModuleName.Thing" के माध्यम से संदर्भित किया जा सकता है, जो नामस्थान के लिए एक ही वाक्यविन्यास है, लेकिन अयोग्य पहुँच के लिए अनुमति देने के लिए F # में मॉड्यूल को भी 'खोला' जा सकता है, जैसे।

open ModuleName
...
Thing  // rather than ModuleName.Thing

(EDIT: Namespaces को भी इसी तरह खोला जा सकता है, लेकिन यह तथ्य कि मॉड्यूल में मान हो सकते हैं और फ़ंक्शन एक मॉड्यूल को और अधिक 'दिलचस्प' बनाते हैं, इसमें आप मूल्यों और कार्यों को हवा दे सकते हैं, उदाहरण के लिए "cos", नाम जिनका आप उपयोग कर सकते हैं। सीधे, जबकि अन्य .Net भाषाओं में आपको आमतौर पर इसे योग्य बनाना होगा, जैसे "Math.cos")।

यदि आप F # में 'शीर्ष स्तर' पर कोड लिखते हैं, तो यह कोड एक मॉड्यूल में जाता है।

आशा है कि कुछ हद तक मदद करता है, यह एक बहुत खुला सवाल है। :)


यह पूरी तरह से सही नहीं हो सकता। मॉड्यूल C # में भी मौजूद हैं, क्या वे ऐसा नहीं करते हैं ?: stackoverflow.com/questions/645728/what-is-a-module-in-net
अलेक्जेंडर बर्ड

1
खैर, वहाँ एक netmodule है, जो एक .NET चीज़ है, और एक F # मॉड्यूल है, जो एक F # चीज़ है, और मुझे लगता है कि VB में शायद एक मॉड्यूल निर्माण है, और सामान्य सॉफ्टवेयर इंजीनियरिंग अर्थों में कक्षाएं 'मॉड्यूल' हैं ... लेकिन मूल प्रश्न एफ # मॉड्यूल के बारे में था।
ब्रायन

1
यहां एक शानदार लिंक है , जो एक विधानसभा और एक शुद्ध मॉड्यूल के बीच के संबंध की व्याख्या करता है - एक एकल विधानसभा में 2 शुद्ध दो भाषाओं में लिखे गए नेटमॉड्यूल हो सकते हैं।
दाराज़

2
C # 6 में 'स्थिर का उपयोग करते हुए' जैसा दिखता है
ब्रूनो गार्सिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.