यदि मैं require
रूबी में एक रिश्तेदार फाइल करना चाहता हूं और मैं इसे 1.8.x और> = 1.9.2 दोनों में काम करना चाहता हूं तो सबसे अच्छा अभ्यास क्या है ?
मुझे कुछ विकल्प दिखाई देते हैं:
- बस करो
$LOAD_PATH << '.'
और सब कुछ भूल जाओ - करना
$LOAD_PATH << File.dirname(__FILE__)
require './path/to/file'
- जाँच करें कि
RUBY_VERSION
<1.9.2, तो इसrequire_relative
रूप में परिभाषितrequire
करें,require_relative
हर जगह का उपयोग करें जहां इसकी आवश्यकता है - जांचें कि क्या
require_relative
पहले से मौजूद है, अगर ऐसा होता है, तो पिछले मामले में आगे बढ़ने की कोशिश करें - अजीब निर्माणों का उपयोग करें - जैसे कि वे रूबी 1.9 में काम नहीं करते हैं, उदाहरण के लिए, क्योंकि:
require File.join(File.dirname(__FILE__), 'path/to/file')
$ cat caller.rb require File.join(File.dirname(__FILE__), 'path/to/file') $ cat path/to/file.rb puts 'Some testing' $ ruby caller Some testing $ pwd /tmp $ ruby /tmp/caller Some testing $ ruby tmp/caller tmp/caller.rb:1:in 'require': no such file to load -- tmp/path/to/file (LoadError) from tmp/caller.rb:1:in '<main>'
- यहां तक कि weirder निर्माण: काम करने लगता है, लेकिन यह अजीब है और बहुत अच्छी नहीं लग रही है।
require File.join(File.expand_path(File.dirname(__FILE__)), 'path/to/file')
- बैकपोर्ट मणि का उपयोग करें - यह एक तरह का भारी है, इसके लिए माणिक्य बुनियादी ढांचे की आवश्यकता होती है और इसमें अन्य वर्कअराउंड के टन शामिल होते हैं, जबकि मैं सिर्फ
require
रिश्तेदार फाइलों के साथ काम करना चाहता हूं ।
StackOverflow में एक बारीकी से संबंधित प्रश्न है जो कुछ और उदाहरण देता है, लेकिन यह एक स्पष्ट जवाब नहीं देता है - जो एक सर्वोत्तम अभ्यास है।
क्या मेरे आवेदन को रूबी <1.9.2 और> = 1.9.2 दोनों पर चलाने के लिए कोई सभ्य, स्वीकृत-हर-कोई सार्वभौमिक समाधान है?
अपडेट करें
स्पष्टता: मैं केवल "आप एक्स कर सकते हैं" जैसे उत्तर नहीं चाहते हैं - वास्तव में, मैंने पहले ही प्रश्न में अधिकांश विकल्पों का उल्लेख किया है। मैं औचित्य चाहता हूं , अर्थात यह एक सर्वोत्तम अभ्यास क्यों है, इसके नियम और विपक्ष क्या हैं और इसे दूसरों के बीच क्यों चुना जाना चाहिए।
a.rb
हैं और b.rb
वर्तमान निर्देशिका में फ़ाइल की सामग्री को पढ़ने और पार्स करने की व्याख्या करना चाहते हैं (आमतौर पर उसी तरह की dir a.rb
), तो आप बस लिखेंगे require 'b'
और यह ठीक रहेगा क्योंकि डिफ़ॉल्ट खोज पथ में वर्तमान निर्देशिका शामिल है। अधिक आधुनिक रूबी 1.9 में, आपको require_relative 'b'
इस मामले में लिखना require 'b'
होगा , क्योंकि यह केवल मानक पुस्तकालय पथों में खोज करेगा। यह उस तरह की सरल स्क्रिप्ट के लिए आगे और पीछे की संगतता को तोड़ता है जो ठीक से स्थापित नहीं होने जा रहे हैं (उदाहरण के लिए, स्वयं स्क्रिप्ट स्थापित करें )।
backports
सिर्फ इसके लिए उपयोग कर सकते हैं require_relative
, मेरा उत्तर देखें ...
require
औरrequire_relative
?