रूबी में "आवश्यकता" विधि

पुन: प्रयोज्य घटकों को बनाने के लिए, जिन्हें अन्य कार्यक्रमों में आसानी से उपयोग किया जा सकता है, एक प्रोग्रामिंग भाषा में रन-टाइम पर उस कोड को सुचारू रूप से आयात करने का कुछ तरीका होना चाहिए। में माणिक, को की आवश्यकता होती है पद्धति का उपयोग किसी अन्य फ़ाइल को लोड करने और उसके सभी निष्पादन के लिए किया जाता है बयान. यह सभी वर्ग और आयात करने के लिए कार्य करता है तरीका फ़ाइल में परिभाषाएँ। फ़ाइल में केवल सभी कथनों को निष्पादित करने के अलावा, आवश्यकता विधि भी ट्रैक करती है कि कौन सी फाइलें पहले आवश्यक हैं और इस प्रकार, दो बार फाइल की आवश्यकता नहीं होगी।

'आवश्यकता' विधि का उपयोग करना

आवश्यकता विधि फ़ाइल का नाम लेने की आवश्यकता है, एक के रूप में तार, एक ही तर्क के रूप में। यह या तो फ़ाइल के लिए एक पथ हो सकता है, जैसे कि ./lib/some_library.rb या छोटा नाम, जैसे कि some_library. यदि तर्क एक पथ और पूर्ण फ़ाइल नाम है, तो फ़ाइल के लिए आवश्यक विधि दिखाई देगी। हालाँकि, यदि तर्क छोटा नाम है, तो उस फ़ाइल के लिए आपके सिस्टम पर कई पूर्व-निर्धारित निर्देशिकाओं के माध्यम से खोज करने की आवश्यकता होगी। आवश्यकता विधि का उपयोग करने का सबसे सामान्य तरीका छोटा नाम है।

instagram viewer

निम्न उदाहरण दर्शाता है कि आवश्यकता कथन का उपयोग कैसे किया जाए। फ़ाइल test_library.rb पहले कोड ब्लॉक में है। यह फ़ाइल एक संदेश प्रिंट करती है और एक नए वर्ग को परिभाषित करती है। दूसरा कोड ब्लॉक फ़ाइल है test_program.rb. यह फ़ाइल लोड करता है test_library.rb फ़ाइल का उपयोग करते हुए और एक नया बनाता है TestClass वस्तु।

"test_library शामिल है"
क्लास टेस्टक्लास
आरंभीकृत करना
"TestClass ऑब्जेक्ट बनाया गया" डालता है
समाप्त
समाप्त
#! / usr / bin / env माणिक
आवश्यकता 'test_library.rb'
t = TestClass.new

नाम बंद से बचें

पुन: प्रयोज्य घटकों को लिखते समय, किसी भी वर्ग या विधियों के बाहर या उपयोग करके वैश्विक दायरे में कई चर घोषित नहीं करना सबसे अच्छा है $ उपसर्ग। यह कुछ बुलाया "को रोकने के लिए हैनामस्थान प्रदूषण"यदि आप बहुत सारे नामों की घोषणा करते हैं, तो एक अन्य कार्यक्रम या लाइब्रेरी एक ही नाम घोषित कर सकता है और एक नाम के टकराव का कारण बन सकता है। जब दो पूरी तरह से असंबंधित पुस्तकालय गलती से एक-दूसरे के चर को बदलना शुरू कर देते हैं, तो चीजें टूट जाएगी - यादृच्छिक रूप से प्रतीत होती हैं। यह नीचे ट्रैक करने के लिए एक बहुत मुश्किल बग है और इसे से बचने के लिए सबसे अच्छा है।

नाम की गड़बड़ी से बचने के लिए, आप अपनी लाइब्रेरी के अंदर सब कुछ संलग्न कर सकते हैं मापांक बयान। इसके लिए लोगों को आपकी कक्षाओं और पद्धति को पूरी तरह से योग्य नाम से संदर्भित करना होगा जैसे कि MyLibrary:: my_method, लेकिन यह नाम लायक है क्योंकि आम तौर पर झड़पें नहीं होंगी। जो लोग वैश्विक दायरे में आपके सभी वर्ग और विधि के नाम रखना चाहते हैं, वे इसका उपयोग कर सकते हैं शामिल बयान।

निम्नलिखित उदाहरण पिछले उदाहरण को दोहराता है लेकिन सब कुछ एक में संलग्न करता है मेरा पुस्तकालय मापांक। के दो संस्करण my_program.rb दिया जाता है; एक जो उपयोग करता है शामिल बयान और एक है कि नहीं करता है।

"test_library शामिल है"
मॉड्यूल MyLibrary
क्लास टेस्टक्लास
आरंभीकृत करना
"TestClass ऑब्जेक्ट बनाया गया" डालता है
समाप्त
समाप्त
समाप्त
#! / usr / bin / env माणिक
आवश्यकता है 'test_library2.rb'
t = MyLibrary:: TestClass.new
#! / usr / bin / env माणिक
आवश्यकता है 'test_library2.rb'
MyLibrary शामिल करें
t = TestClass.new

पूर्ण पथ से बचें

क्योंकि पुन: प्रयोज्य घटक अक्सर चारों ओर चले जाते हैं, इसलिए यह भी आवश्यक है कि अपनी आवश्यकता के कॉल में निरपेक्ष पथों का उपयोग न करें। एक निरपेक्ष पथ एक पथ की तरह है /home/user/code/library.rb. आप देखेंगे कि फ़ाइल काम करने के लिए उस सटीक स्थान पर होनी चाहिए। यदि स्क्रिप्ट को कभी स्थानांतरित किया जाता है या आपके घर की निर्देशिका कभी बदलती है, तो आवश्यकता होती है कि कथन काम करना बंद कर देगा।

निरपेक्ष रास्तों के बजाय, यह अक्सर एक बनाने के लिए आम है ./lib अपने रूबी कार्यक्रम की निर्देशिका में निर्देशिका। ./lib निर्देशिका में जोड़ा जाता है $ LOAD_PATH चर जो निर्देशिकाओं को संग्रहीत करता है जिसमें आवश्यकता विधि रूबी फ़ाइलों की खोज करती है। उसके बाद, यदि फ़ाइल my_library.rb यह लिबरी डायरेक्टरी में संग्रहीत है, इसे आपके प्रोग्राम में एक साधारण के साथ लोड किया जा सकता है आवश्यकता 'my_library' बयान।

निम्न उदाहरण पिछले जैसा ही है test_program.rb उदाहरण। हालाँकि, यह मानता है test_library.rb फ़ाइल में संग्रहीत है ./lib निर्देशिका और इसे ऊपर वर्णित विधि का उपयोग करके लोड करता है।

#! / usr / bin / env माणिक
$ LOAD_PATH << './lib'
आवश्यकता 'test_library.rb'
t = TestClass.new
instagram story viewer