जवाबों:
यह वर्तमान फ़ाइल नाम का संदर्भ है। फ़ाइल में foo.rb, के __FILE__रूप में व्याख्या की जाएगी "foo.rb"।
संपादित करें: रूबी 1.9.2 और 1.9.3 अपनी टिप्पणी में ल्यूक बेयस द्वारा कही गई बात से थोड़ा अलग व्यवहार करते दिखाई देते हैं । इन फ़ाइलों के साथ:
# test.rb
puts __FILE__
require './dir2/test.rb'
# dir2/test.rb
puts __FILE__
रनिंग ruby test.rbआउटपुट देगा
test.rb
/full/path/to/dir2/test.rb
`__FILE__`पाने के लिए लिखो __FILE__।
__FILE__जब आपकी फ़ाइल लोड की जाती है तो संग्रहीत और संग्रहीत (लेकिन कभी अद्यतन नहीं) एक सापेक्ष पथ का मान है। इसका मतलब यह है कि यदि Dir.chdirआपके आवेदन में कहीं और कॉल है , तो यह पथ गलत तरीके से विस्तारित होगा।
puts __FILE__
Dir.chdir '../../'
puts __FILE__
इस समस्या का एक समाधान __FILE__किसी भी एप्लिकेशन कोड के बाहर के विस्तारित मूल्य को संग्रहीत करना है । जब तक आपके requireकथन आपकी परिभाषाओं के शीर्ष पर हैं (या कम से कम किसी भी कॉल से पहले Dir.chdir), तब तक यह मान बदलती निर्देशिकाओं के लिए उपयोगी रहेगा।
$MY_FILE_PATH = File.expand_path(File.dirname(__FILE__))
# open class and do some stuff that changes directory
puts $MY_FILE_PATH
This means that if you have any calls to Dir.chdir anywhere else in your application, this path will expand incorrectly.मेरे परीक्षण के तहत पथ सही ढंग से विस्तारित हुआ। मेरा रूबी संस्करण 2.3.7 है, शायद नए रूबी संस्करण ने इस मुद्दे को ठीक कर दिया है।
__FILE__ फ़ाइल के विस्तार के साथ फ़ाइलनाम है जिसमें कोड निष्पादित किया जा रहा है।
में foo.rb, __FILE__"foo.rb" होगा।
अगर foo.rbदिर में होता /home/joshतो File.dirname(__FILE__)लौट जाता /home/josh।
रूबी में, Windows संस्करण वैसे भी, मैंने अभी जाँच की है और __FILE__इसमें फ़ाइल का पूरा पथ नहीं है। इसके बजाय इसमें फ़ाइल के लिए पथ सम्मिलित है जहां से इसे क्रियान्वित किया जा रहा है।
PHP __FILE__में पूर्ण पथ है (जो मेरी राय में बेहतर है)। यही कारण है कि, रूबी में अपने रास्तों को पोर्टेबल बनाने के लिए, आपको वास्तव में इसका उपयोग करने की आवश्यकता है:
File.expand_path(File.dirname(__FILE__) + "relative/path/to/file")
मुझे ध्यान देना चाहिए कि रूबी 1.9.1 __FILE__में फ़ाइल के लिए पूर्ण पथ शामिल है, उपरोक्त विवरण तब था जब मैंने रूबी 1.8.7 का उपयोग किया था।
रूबी 1.8.7 और 1.9.1 (1.9 के बारे में निश्चित नहीं) दोनों के साथ संगत होने के लिए, आपको ऊपर दिखाए गए निर्माण का उपयोग करके फ़ाइलों की आवश्यकता होनी चाहिए।
File.expand_path(File.dirname(__FILE__) + "/relative/path/to/file")
File.expand_path( File.join( File.dirname(__FILE__), "relative", "path", "to", "file") )