2010-03-11 24 views
19

मैं एक समारोह है कि मेरे कार्यक्रम के सभी भागों में एक्सेस किया जा सकेगा जोड़ने की कोशिश कर रहा हूँ। मुझे कुछ चाहिए:रूबी: मॉड्यूल बनाम वर्ग

def GlobalFunctions.my_function(x,y) 
    puts x + y 
end 

सभी मॉडलों के लिए सुलभ होने के लिए। विशेष रूप से मैं अपने seeds.rb फ़ाइल में इस तरह एक समारोह का उपयोग करने के कोशिश कर रहा हूँ, लेकिन मैं सबसे अधिक संभावना कोड पुन: उपयोग किया जा करने के लिए जा रहा हूँ और किसी भी अतिरेक नहीं करना चाहती। अब मुझे पता है कि मैं एक साधारण वर्ग बना सकता हूं, लेकिन मैं मॉड्यूल भी बना सकता हूं। किसी भी दिशा में जाने के कुछ कारण क्या हैं? और एक बार मैंने फैसला किया है कि किस प्रकार का उपयोग करना है, मैं पूरे कार्यक्रम में इसे कैसे सुलभ बना सकता हूं?

मैं एक मॉड्यूल की कोशिश की है, लेकिन मैं "[ModuleName] परिभाषित करने के लिए अपेक्षित एप्लिकेशन/[मॉड्यूल फ़ाइल]" मिलती रहती है

उत्तर

43

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

module GlobalFunctions 
    def self.my_function(x,y) 
    puts x+y 
    end 
end 

GlobalFunctions.my_function(4,5) # => 9 

वैकल्पिक रूप से, आप इसे कर्नेल पर निर्धारित कर सकते हैं, और फिर बस इसे कहीं भी कहते हैं। कर्नेल वह है जहां पुट जैसे तरीके परिभाषित किए जाते हैं।

def Kernel.my_function(x,y) 
    puts x + y 
end 

my_function(4,5) # => 9 
+0

धन्यवाद एक बहुत !!! – JackCA

+0

वहाँ एक विशिष्ट स्थान इन मॉड्यूल के लिए बचाया जा सकता है? –

+1

मैं आमतौर पर 'lib' फ़ोल्डर में मॉड्यूल डाल दिया। – Tintin81

2

PreciousBodilyFluids सही है, और अगर यह GlobalFunctions एक आतंक विरोधी परियोजना का हिस्सा है, तो आप फ़ाइल global_functions.rb नाम और lib/ निर्देशिका में यह जगह मदद करने के लिए क्या आप के अंत में तैनात त्रुटि संदेश से बचने के लिए चाहते हो सकता है आपका प्रश्न। कर्नेल (PreciousBodilyFluids से जवाब) को

16

जोड़ना तरीकों आमतौर पर एक बुरा गंध माना जाता है और बड़ी परियोजनाओं में कीड़े खोजने के लिए कुछ वास्तव में कड़ी मेहनत करने के लिए नेतृत्व कर सकते हैं।

यह भी बहुत कुछ करने के लिए स्वीकार कर लिया है प्रासंगिक कोड नाम स्थान और करने के लिए/lib/में डाल दिया।

class Formatting 
    def self.bold(str) 
    return "<strong>#{str}</strong>" 
    end 
end 

फिर आप कर सकते हैं:

require 'formatting' 
puts Formatting.bold("text") 

या

require 'formatting' 
include Formatting 

puts bold("text") 

यह किसी को जो क्या आप भी उपयोग कर रहे हैं बाद में कोड की बात आती है के लिए स्पष्ट हो जाएगा। यदि आप रेल का उपयोग कर रहे हैं तो आपको आवश्यकता की आवश्यकता नहीं होगी।

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