2011-11-14 13 views
16

मेरे पास रूबी कोड फ़ाइल (somelogic.rb) है जिसमें कई विधियों और कक्षाएं हैं, जो कहें,/home/user/code में स्थित हैं। अब मैं एक ही निर्देशिका में एक और कक्षा लिख ​​रहा हूं और somelogic.rb में विधियों और वर्गों का संदर्भ देना चाहता हूं। मैं उसको कैसे करू? मैं किसी भी इनपुट की बहुत सराहना करता हूं।किसी अन्य रूबी कोड फ़ाइल में किसी विधि का संदर्भ कैसे लें?

+1

को 'somelogic' –

उत्तर

20

आप रूबी 1.9 का उपयोग कर रहे या बाद में, इस यह करने के लिए सबसे आसान तरीका है:

require_relative 'somelogic' 

आप अपने कोड रूबी के 1.9 और पुराने संस्करणों में काम करना चाहते हैं तो आपको इसके बजाय यह करना चाहिए:

require File.join File.dirname(__FILE__), 'somelogic' 

जो भी लाइन आप चुनते हैं, आपको इसे अपनी रूबी फ़ाइल के शीर्ष पर रखना चाहिए। फिर somelogic.rb में परिभाषित किसी भी वर्ग, मॉड्यूल, या वैश्विक चर आपके प्रोग्राम के लिए उपलब्ध होंगे।

0

दूसरी फ़ाइल में चेक (माना otherlogic.rb) लिखने पहली पंक्ति पर '/home/user/code/somelogic.rb' की आवश्यकता है।

/home/user/code/somelogic.rb 
class MyMath 
    def self.sin(number) 
    ... 
    end 
end 

आप अपने अन्य फ़ाइल mylogic.rb में तरीकों sin उपयोग करना चाहते हैं:

+3

की आवश्यकता है, कृपया ऐसा न करें। आपका कोड बिल्कुल पोर्टेबल नहीं होगा। – mliebelt

+0

मुझे पता है कि मैं बस यह सुनिश्चित कर रहा था कि फ़ाइल शामिल की जाएगी (1.9.2 में 'आवश्यकता' के साथ कुछ समस्या है)। यदि आप एक ही निर्देशिका में हैं तो आपको केवल 'otherlogic.rb' की आवश्यकता होगी –

9

यहाँ परिदृश्य है।

माणिक के संस्करण के आधार पर निम्न एक कार्य करें:

Ruby 1.8.x 
require "somelogic" 
class OtherThings 
    def some_method 
    MyMath.sin(42) 
    end 
end 

के उपयोग की पद्धति सभी माणिक संस्करणों के लिए ही है, लेकिन बयान की आवश्यकता होती है अलग हो सकता है।

Ruby 1.9.x 
require_relative "somelogic" 

या विविधता

Ruby 1.9.x 
require "./somelogic" 

पहले बदलाव के लिए हर समय काम करता है, दूसरा एक केवल यदि आप निर्देशिका है जहाँ mylogic.rb और somelogic.rb स्थित हैं में ruby mylogic.rb कहते हैं।

आप एक प्रारंभिक एक और निर्देशिका में स्थित बिंदु से है कि निर्देशिका से फ़ाइलों को लोड करना चाहते हैं, तो आप का उपयोग करना चाहिए:

Ruby 1.8.x and Ruby 1.9.x 
$: << File.dirname(__FILE__) 

यह रूबी का भार पथ फैलता है। यह __FILE__ के (सापेक्ष) पथ को पढ़ता है, इसकी निर्देशिका प्राप्त करता है, और उस निर्देशिका के (पूर्ण) पथ को आपके लोड पथ में जोड़ता है। तो जब require द्वारा लुकअप कर रहे हैं, तो फाइलें मिलेंगी।

+5

'आवश्यकता' के बीच एक महत्वपूर्ण अंतर है।/Somelogic'' और 'requ_relative 'somelogic''। उत्तरार्द्ध एक फ़ाइल * स्क्रिप्ट के सापेक्ष * के लिए दिखता है, जबकि पूर्व मौजूदा कार्यशील निर्देशिका में दिखता है। कल्पना कीजिए कि हम "प्रोजेक्ट" नामक निर्देशिका में हैं और हम रूबी प्रोग्राम "स्क्रिप्ट/do_the_thing.rb" चलाते हैं। यदि "do_the_thing.rb" 'requ_relative' का उपयोग करता है, तो यह" प्रोजेक्ट/स्क्रिप्ट/somelogic.rb "की तलाश करेगा। दूसरी तरफ, अगर हम 'आवश्यकता' लिखेंगे।/Somelogic ', यह "परियोजना/somelogic.rb" की तलाश करेगा। – Chuck

+0

अच्छा बिंदु, मैं इसे उत्तर में जोड़ दूंगा। बहुत बहुत धन्यवाद! – mliebelt

+0

चक ने जो कहा, उसमें जोड़ना, 'आवश्यकता' करना/खराब होना 'क्योंकि' रूबी दुभाषिया की वर्तमान कार्यशील निर्देशिका के बारे में एक गलती है, इसलिए यह अन्य परियोजनाओं में आपके कोड का पुन: उपयोग करना मुश्किल बनाता है। –

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