दिलचस्प पोस्ट
पायथन में टाइमआउट के साथ कीबोर्ड इनपुट एएसपी.नेट एमवीसी बनाम वेब फॉर्म का उपयोग करने के लिए सबसे बड़ा लाभ लक्ष्य सेल में दूसरे कक्ष का सूत्र प्राप्त करना document.createElement ('स्क्रिप्ट') … एक कॉलबैक के साथ दो स्क्रिप्ट जोड़ने जावास्क्रिप्ट में gzip और zlib स्ट्रिंग को खारिज करें JavaFX 2.2 में एसवीजी छवि बाश का उपयोग करके, आप निर्देशिका में सभी फाइलों से कैसे एक क्लासपाथ बनाते हैं? Stateless बनाम स्टेटफुल – मैं कुछ ठोस जानकारी का उपयोग कर सकता हूं स्विफ्ट प्रदर्शन: सॉर्टिंग एरेज़ प्रोग्रामैटिक रूप से डिफ़ॉल्ट ध्वनि प्लेबैक डिवाइस को कैसे बदला जाए? चेक पॉइंट को चेकआउट के बिना विभिन्न कमांड में ले जाएं एसक्यूएल सर्वर अमान्य ऑब्जेक्ट का नाम – लेकिन टेबल SSMS टेबल सूची में सूचीबद्ध हैं NullPointer जावा टर्नरी ऑपरेटर के ऑटो बॉक्सिंग-व्यवहार के माध्यम से अपवाद उदाहरण के भीतर से EC2 टैग क्वेरी सैलेनियम 2.53 फ़ायरफ़ॉक्स 47 पर काम नहीं कर रहा है

रूबी में एक निर्देशिका से सभी फाइलों की आवश्यकता का सबसे अच्छा तरीका है?

रूबी में एक निर्देशिका से सभी फाइलों की आवश्यकता का सबसे अच्छा तरीका क्या है?

Solutions Collecting From Web of "रूबी में एक निर्देशिका से सभी फाइलों की आवश्यकता का सबसे अच्छा तरीका है?"

कैसा रहेगा:

Dir["/path/to/directory/*.rb"].each {|file| require file } 

यदि यह फाइल के सापेक्ष एक निर्देशिका है जो आवश्यक है (उदाहरण के लिए आप सभी लिबरेट निर्देशिका में फाइल लोड करना चाहते हैं):

 Dir[File.dirname(__FILE__) + '/lib/*.rb'].each {|file| require file } 

Require_all मणि की कोशिश करो:

  1. http://github.com/jarmo/require_all
  2. https://rubygems.org/gems/require_all

यह आपको आसानी से देता है:

 require_all 'path/to/directory' 
 Dir[File.dirname(__FILE__) + '/../lib/*.rb'].each do |file| require File.basename(file, File.extname(file)) end 

यदि आप एक्सटेंशन को पट्टी नहीं करते हैं, तो आपको एक ही फाइल को दो बार आवश्यकता हो सकती है (रूबी को नहीं पता होगा कि "फू" और "फू। आरबी" एक ही फाइल है)। उसी फ़ाइल को दो बार प्राप्त करने से नकली चेतावन हो सकते हैं (उदाहरण के लिए "चेतावनी: पहले से ही प्रारंभिक स्थिरांक")।

 Dir.glob(File.join('path', '**', '*.rb'), &method(:require)) 

या वैकल्पिक रूप से, अगर आप फ़ाइलों को विशिष्ट फ़ोल्डरों में लोड करने के लिए गुंजाइश करना चाहते हैं:

 Dir.glob(File.join('path', '{folder1,folder2}', '**', '*.rb'), &method(:require)) 

स्पष्टीकरण:

Dir.glob तर्क के रूप में एक ब्लॉक लेता है।

विधि (आवश्यक) आवश्यकता विधि लौटाएगा

और विधि (: आवश्यकता) विधि को एक ब्लॉक में कनवर्ट करेगी।

सबसे अच्छा तरीका है कि लोड पथ में निर्देशिका को जोड़ना है और फिर प्रत्येक फ़ाइल के बेसएनाम की require है इसका कारण यह है कि आप गलती से उसी फ़ाइल को दो बार से बचना चाहते हैं – वांछित व्यवहार नहीं अक्सर चाहे फाइल भरी हुई हो या न हो, इस पर निर्भर है कि क्या require है कि इससे पहले मार्ग को पास किया गया हो। उदाहरण के लिए, यह आसान इरब सत्र दिखाता है कि आप गलती से दो बार एक ही फ़ाइल की आवश्यकता कर सकते हैं और लोड कर सकते हैं।

 $ irb irb(main):001:0> require 'test' => true irb(main):002:0> require './test' => true irb(main):003:0> require './test.rb' => false irb(main):004:0> require 'test' => false 

ध्यान दें कि पहले दो पंक्तियों को true अर्थ है, एक ही फाइल को दोनों बार लोड किया गया था। जब पथ का उपयोग किया जाता है, भले ही पथ एक ही स्थान को इंगित करते हों, तो यह require नहीं है कि फ़ाइल पहले ही जरूरी है।

इसके बजाय, हम लोड पथ में एक निर्देशिका जोड़ते हैं और इसके बाद प्रत्येक * .rb फ़ाइल के मूलनाम की आवश्यकता होती है।

 dir = "/path/to/directory" $LOAD_PATH.unshift(dir) Dir[File.join(dir, "*.rb")].each {|file| require File.basename(file) } 

यदि आपको फ़ाइल की एक से अधिक बार आवश्यकता होने की परवाह नहीं है, या आपकी इच्छा फ़ाइल की सामग्री को लोड करने के लिए है, तो शायद require स्थान पर load का उपयोग किया जाना चाहिए इस मामले में लोड का उपयोग करें, क्योंकि यह बेहतर व्यक्त करता है कि आप क्या पूरा करने की कोशिश कर रहे हैं। उदाहरण के लिए:

 Dir["/path/to/directory/*.rb"].each {|file| load file } 

कुछ उत्तरों की तरह रास्तों को File.expand_path बजाय, मैं File.expand_path उपयोग करता File.expand_path :

 Dir[File.expand_path('importers/*.rb', File.dirname(__FILE__))].each do |file| require file end 

अद्यतन करें:

File.dirname का उपयोग करने के बजाय आप निम्न कर सकते हैं:

 Dir[File.expand_path('../importers/*.rb', __FILE__)].each do |file| require file end 

कहाँ .. __FILE__ के फ़ाइल नाम स्ट्रिप्स

 Dir[File.join(__dir__, "/app/**/*.rb")].each do |file| require file end 

यह आपके स्थानीय मशीन और एक रिमोट (हरोको की तरह) पर पुनरावर्ती रूप से काम करेगा जो सापेक्ष पथ का उपयोग नहीं करता है।

रेल में, आप यह कर सकते हैं:

 Dir[Rails.root.join('lib', 'ext', '*.rb')].each { |file| require file } 

अद्यतन: @जग्नन्श गोहेल के सुझाव के साथ ठीक किया गया ताकि स्लेश हटाया जा सके।

मैं कुछ साल पार्टी में देर कर रहा हूं, लेकिन मैं इस तरह के एक-लाइन समाधान की तरह ही रेल / एप / श्रमिक / चिंताओं में सब कुछ शामिल करने के लिए रेल का इस्तेमाल करता हूं:

Dir[ Rails.root.join *%w(app workers concerns *) ].each{ |f| require f }

और इसके बारे में क्या: require_relative *Dir['relative path'] ?