2013-10-29 9 views
5

बनामगहरे लाल रंग का './blahblah.rb' की आवश्यकता होती है बनाम File.expand_path ('../ blahblah', __FILE__) की आवश्यकता होती है

require './blahblah.rb' 

require 'blahblahlblah.rb' 

के बीच का अंतर बनाम

क्या है
require File.expand_path('../blahblah', __FILE__) 

मुझे लगता है कि उनमें से दोनों का उपयोग किया जा रहा है। आश्चर्य की बात है कि क्या बेहतर है, और किस परिस्थिति में दूसरे की तुलना में बेहतर है।

धन्यवाद!

उत्तर

5
  • require blaba.rb अपने डिफ़ॉल्ट मणि पथ लिए खोज कर रहा है फ़ाइल है, जो गहरे लाल रंग का संस्करण प्रयोग कर रहे पर निर्भर करता है लोड करने के लिए। उदाहरण के लिए RVM $HOME/.rvm/rubies/... में खोज करेगा जबकि सिस्टम विस्तृत रूबी वितरण के डिफ़ॉल्ट पथ में खोज करेगा। ध्यान दें कि यह वह जगह है जहां रत्न स्थित हैं, लेकिन आप उसी लाइब्रेरी में मैन्युअल रूप से mylibrary.rb कह सकते हैं और इसे अपने किसी भी प्रोग्राम में उपयोग कर सकते हैं। हालांकि, यह करने के लिए एक भयानक बात है, यह रत्न बनाने और उन्हें अपने सिस्टम में स्थापित करने के लिए एक बहुत साफ प्रक्रिया है।

  • require ./blabla.rb एक फ़ाइल है कि आपके बैठी है कार्यशील निर्देशिका लोड करता है। आप require /home/username/library/myproject/models/sample.rb जैसे पूर्ण पथ जोड़ सकते हैं। यह सिर्फ उसी के बारे में काम करेगा। यूनिक्स जैसी दुनिया में ./ संकेत का अर्थ है वर्तमान निर्देशिका। रेलवे मॉडल i.e users.rbirb या pry में लोड करने और इसके साथ काम करने के लिए अक्सर इस समाधान का उपयोग irb में किया जाता है। एक खोल वातावरण में आपको एक उदाहरण देता करने के लिए (यदि आप यूनिक्स के गोले के साथ परिचित हैं, तो आप यह पता लगा लेंगे):

    GreyJewel ~ » ls myports.txt                                       
    myports.txt 
    
    GreyJewel ~ » ls ./myports.txt                                      
    ./myports.txt 
    
  • तीसरे समाधान require File.expand_path('../sample.rb', __FILE__), कार्यक्रमों में प्रयोग किया जाता है यह स्पष्ट रूप से एक पूर्ण बनाता है क्योंकि पथ एक एंकर के रूप में उपयोग करने वाली निर्देशिका जो लाइन को पकड़ने वाली फ़ाइल है, जो require ./sample.rb की तुलना में अधिक सुरक्षित दृष्टिकोण है। ध्यान दें कि जब आप रूबी फ़ाइल लोड करते हैं, तो आप फ़ाइल एक्सटेंशन .rb को छोड़ सकते हैं।

आशा है कि यह स्थिति को थोड़ा सा स्पष्ट करे।

+0

धन्यवाद। तीसरा समाधान दूसरा से अधिक सुरक्षित क्यों है? – 0xSina

+0

क्योंकि वह विधि किसी विशिष्ट फ़ाइल को 'पूर्ण पथ' देता है जो हमेशा 'रिश्तेदार पथ' की तुलना में यूनिक्स पर्यावरण पर सुरक्षित होती है। 'Irb' पर दोनों को आज़माएं, आप पाएंगे कि वे कैसे काम करते हैं। –

संबंधित मुद्दे