यदि आप वेनिला रूबी पर विचार करते हैं, तो 'आवश्यकता' ज्यादातर पहली पंक्तियों में उपयोग की जाती है, क्योंकि आप सुनिश्चित हैं कि आपके पास आवश्यकतानुसार पहुंच है, और आपको जो निर्भरता चाहिए उसे ढूंढना और पढ़ना आसान है।
कुछ मामले हैं जब आप केवल एक विधि में एक मणि लोड करना चाहते हैं, क्योंकि आपकी स्क्रिप्ट के लिए यह वास्तव में आवश्यक नहीं है (उदाहरण: एक वैकल्पिक विज़ुअलाइजेशन)।
रेल के साथ, मुझे विश्वास है कि यह इस बात पर निर्भर करता है कि आप क्या करना चाहते हैं।
यदि आप बंडलर का उपयोग करते हैं, तो आप मान सकते हैं कि आपका मणि 'आवश्यक' है (आप निश्चित रूप से आवश्यक विकल्प के साथ ओवरराइड कर सकते हैं)।
यदि यह कुछ सामान है जो सर्वर प्रारंभ होने पर स्वत: लोड करना चाहते हैं (जैसे वैधकर्ता या फॉर्म बिल्डर्स), तो आपको कॉन्फ़िगर (autoload_paths और eager_load_paths) के साथ कैसे करना चाहिए, देखना चाहिए।
आवश्यकताएं भी एक मणि के केवल एक हिस्से को लोड करने के लिए उपयोग की जा सकती हैं, जैसे विस्तार। फिर यह निश्चित रूप से आवश्यक है जहां कॉन्फ़िगरेशन है।
यदि आप बहु-थ्रेडेड वातावरण में काम करते हैं तो आप चिंतित हो सकते हैं, क्योंकि उनमें कुछ समस्याएं हैं। तब आपको यह सुनिश्चित करना होगा कि आपके थ्रेड चलने से पहले सब कुछ लोड हो। (कक्षा निरंतर की तरह कुछ लोड हो गया है, लेकिन विधियों अभी तक नहीं, एक अच्छा लेख था लेकिन मुझे अब यह नहीं मिल रहा है)।
आप {मॉड्यूल, कर्नेल} भी आजमा सकते हैं।ऑटोलोड, रेल का उपयोग बड़े पैमाने पर लोड करने के लिए किया जाता है जब एक्सेस किया जाता है (लेकिन यह बदसूरत दिखता है)।
आप इसे स्वयं को const_missing के साथ भी हैक कर सकते हैं (इसलिए यदि आप संरचना स्वीकार करते हैं तो यह सादा आलसी लोडिंग कर सकता है)। यह एक साधारण उदाहरण है (नेस्टेड कक्षाओं के लिए उपयुक्त नहीं होगा)।
def Object.const_missing c
if (file = Dir["#{c.downcase}.rb"]).size == 1
require_relative(file)
end
if const_defined? c
const_get c
else
super # Object < Module
end
end
प्रदर्शन के बारे में, की आवश्यकता होती है के लिए एक कॉल अपेक्षाकृत महंगा है, इसलिए यदि आप जानते हैं कि आप इसका इस्तेमाल करने जा रहे हैं, यह केवल एक बार यदि संभव हो तो करो। हालांकि, अपनी परियोजना के भीतर जटिल निर्भरताओं का प्रबंधन करने के लिए, आपको सापेक्ष फाइलों की आवश्यकता हो सकती है। फिर require_relative
1.9 में जाने का तरीका है।
आखिरकार, एक परियोजना के लिए, मैं कुछ Dir["**/*.rb"]
अभिव्यक्ति के साथ lib/में मुख्य फ़ाइल में सभी की आवश्यकता होगी। इसके बाद आपको शायद ही कभी require_relative
की आवश्यकता होगी, क्योंकि केवल तभी आवश्यक है जब आप कक्षा के शरीर में एक और निरंतर संदर्भित करते हैं (विधियों की सभी सामग्री हल नहीं होती है, इसलिए इसमें कोई समस्या नहीं है)।
एक और समाधान इन स्थिरांक को आपकी मुख्य फ़ाइल में परिभाषित करना होगा, यह आपको संरचना का एक विचार भी देगा।
धन्यवाद टैडमैन, यह जो मैं सोच रहा था उसके अनुरूप है। निष्कर्ष: भारी आवश्यकता का उपयोग करते समय पठनीयता प्रदर्शन से अधिक महत्वपूर्ण है। – Cimm