2009-06-26 11 views
32

थोड़ी देर के लिए मैं रूबी मॉड्यूल के अंदर एक संपूर्ण कक्षा शामिल कर रहा था। जाहिर है यह ऐसा नहीं है जो मुझे करना है। ऐसा प्रतीत होता है कि मॉड्यूल का बिंदु उन कार्यों को संग्रहीत करना है जिन्हें बाद में एक नई कक्षा में विधियों के रूप में शामिल किया जा सकता है।एक अलग फ़ाइल से रूबी क्लास सहित

मुझे यह नहीं चाहिए। मेरे पास एक कक्षा है जिसे मैं एक अलग फाइल में रखना चाहता हूं जिसे मैं अन्य फाइलों से एक्सेस कर सकता हूं। मैं यह कैसे कर सकता हूँ?

धन्यवाद।

+0

इस पोस्ट मामले में require_relative अभिव्यक्ति स्पष्ट किया कि आप ऊपर के उदाहरण के साथ समस्या हो रही है जब रूबी पर> = 1.9.2 [रूबी require_relative उदाहरण] (http://stackoverflow.com/questions/3672586/what-is -क्वायर-सापेक्ष-इन-रूबी) – Dirk

उत्तर

55

मॉड्यूल कार्यों के लिए धारक और नामस्थान के रूप में एक दोहरे उद्देश्य प्रदान करते हैं। मॉड्यूल में कक्षाओं को रखना पूरी तरह से स्वीकार्य है। कक्षा को एक अलग फ़ाइल में रखने के लिए, कक्षा को सामान्य रूप से परिभाषित करें और फिर उस फ़ाइल में जहां आप कक्षा का उपयोग करना चाहते हैं, बस शीर्ष पर require 'name_of_file_with_class' डालें। उदाहरण के लिए, यदि मैंने foo.rb में Foo को bar.rb में परिभाषित किया है, तो मेरे पास require 'foo' लाइन होगी।

आप रेल का उपयोग कर रहे हैं, तो इस में शामिल हैं अक्सर स्वतः

संपादित होता है: फ़ाइल लेआउट के स्पष्टीकरण

#file: foo.rb 
class Foo 
    def initialize 
    puts "foo" 
    end 
end 

...

#file: bar.rb 
require 'foo' 

Foo.new 

आप रेल में हैं, तो डाल इन lib/ में कक्षाएं और कक्षा नाम के लोअरकेस अंडरस्कोर संस्करण की फ़ाइलों के लिए नामकरण सम्मेलन का उपयोग करें, उदाहरण के लिए Foo ->foo.rb, FooBar ->foo_bar.rb, आदि

गहरे लाल रंग का संस्करण 1.9 के रूप में आप require_relative उपयोग कर सकते हैं, अपेक्षाकृत फ़ाइल आप संपादित कर रहे करने के लिए फ़ाइलों की आवश्यकता होती है।

+0

धन्यवाद, बहुत उपयोगी। क्या आप अंतिम वाक्य को स्पष्ट कर सकते हैं? ऐसा लगता है कि आपके पास टाइपो (?) हो सकता है। यदि कक्षा foo bar.rb में संग्रहीत है, तो मुझे bazcontroller.rb में 'foo' की आवश्यकता है? फिर foo.new bazcontroller.rb में प्रयोग योग्य है? – user94154

+9

शायद रूबी 1.9 के लिए 'require_relative' पर कुछ जानकारी जोड़ना अच्छा लगेगा क्योंकि कोड इस संस्करण के लिए काम नहीं करता है। – boutta

+2

@boutta 1.9 स्पष्टीकरण के लिए धन्यवाद, यह मेरी समस्या तय करता है। – DorkRawk

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