2010-09-25 5 views
11

मेरे पास रूबी फाइलों से भरा फ़ोल्डर है, और जब मैं कोशिश करता हूं और require 'file' का उपयोग कर एक ही निर्देशिका में एक फ़ाइल की आवश्यकता होती है तो मुझे LoadError मिलता है लेकिन जब मैं require './file' का उपयोग करता हूं तो सब कुछ ठीक काम करता है। क्या कोई मुझे बता सकता है कि ऐसा क्यों होता है और यदि कोई तरीका है तो मुझे फ़ाइल पर ./ जोड़ने के बिना फ़ाइल की आवश्यकता हो सकती है?रूबी को 'फ़ाइल' की आवश्यकता नहीं है, लेकिन './file' की आवश्यकता होती है। क्यूं कर?

(निर्देशिका का चित्र): alt text

+0

के संभावित डुप्लिकेट मिल सकता है (http [क्या \ _relative की आवश्यकता होती है और रूबी में आवश्यकता के बीच अंतर है?]: // stackoverflow। com/प्रश्न/3672586/क्या-है-अंतर-बीच-आवश्यकता-रिश्तेदार और की आवश्यकता होती है में रूबी) –

उत्तर

16

आप require करने के लिए फ़ाइल चाहते हैं की सामग्री को नहीं प्रणाली $LOAD_PATH बल्कि फ़ाइल की निर्देशिका के सापेक्ष से आप require से ing हैं, तो आप require_relative उपयोग करना चाहिए।

3

आप अपने loadpath में वर्तमान निर्देशिका नहीं है।

चेक $ LOAD_PATH चर

0

हालांकि यह बहुत पुरानी पोस्ट है मुझे लगता है कि कुछ अतिरिक्त जानकारी शुरुआत करने के लिए बहुत उपयोगी हो सकता है (जो, जैसा कि आप देख सकते हैं, नहीं बिल्कुल बड़े पैमाने पर है प्रलेखित।)।

आवश्यकता के बारे में सोचने का सबसे अच्छा तरीका यूनिक्स $ पाथ चर के संबंध में है। एक रिफ्रेशर के माध्यम से, यूनिक्स में $ PATH चर निर्देशिकाओं की एक सूची है जहां निष्पादन योग्य पाया जा सकता है। इसलिए जब आप किसी भी यूनिक्स टर्मिनल पर किसी प्रोग्राम का नाम टाइप करते हैं, तो आपका कंप्यूटर आपके $ PATH चर में निर्दिष्ट निर्देशिकाओं में निष्पादन योग्य फ़ाइलों को देख रहा है। कुछ बहुत समान की आवश्यकता है। उदाहरण के लिए, जब आप अपनी रूबी फ़ाइल के शीर्ष पर 'सेट' लिखते हैं, तो आप रूबी को set.rb (रूबी की सेट लाइब्रेरी) नामक लाइब्रेरी के लिए निर्देशिकाओं के समूह के माध्यम से देखने के लिए कह रहे हैं।

तो रूबी set.rb कहां देखता है? खैर, एक बार फिर, रुबी के पास यूनिक्स के $ PATH चर के समान कुछ है। यह ग्लोबल वेरिएबल $ LOAD_PATH है जिसे कभी-कभी इसके बदसूरत और अनियंत्रित उपनाम $ द्वारा जाना जाता है: (जिसे मैं रास्ते से उपयोग करने का सुझाव नहीं देता - हालांकि यह छोटा हो सकता है)। यह निर्देशिका नामों की एक सरणी है जहां रूबी एक आवश्यकता के दौरान आता है।

वहाँ अच्छा जानकारीपूर्ण पोस्ट here जहां आप अधिक जानकारी के बारे में require, load और require_relative