2012-04-05 8 views
5

वहाँवर्ग का उपयोग << स्वयं, कक्षाओं या मॉड्यूल का उपयोग कब करें?

class Helper 
    class << self 
    # ... 
    end 
end 

और

module Helper 
    class << self 
    # ... 
    end 
end 

जब आप एक दूसरे के ऊपर का प्रयोग करेंगे के बीच उपयोग में अंतर है?

+0

उनमें से एक के मुकाबले एक अतिरिक्त पत्र है? :) "क्या कोई अंतर है" से आपका क्या मतलब है? एक वर्ग है, एक मॉड्यूल है, और दोनों में आप eigenclass में प्रवेश कर रहे हैं। – Phrogz

+0

मुझे लगता है कि मेरा मतलब है, आप दूसरे पर एक का उपयोग कब करेंगे। मैंने इसे प्रतिबिंबित करने के लिए प्रश्न संपादित किया। –

उत्तर

4

class<<self एक लाल हेरिंग प्रतीत होता है, क्योंकि यहां एकमात्र अंतर एक मॉड्यूल बनाम एक वर्ग है। शायद आप पूछ रहे हैं "मैं एक ऐसा ऑब्जेक्ट बनाना चाहता हूं जिसे मैं तत्काल करने का इरादा नहीं रखता, लेकिन जो कुछ तरीकों के लिए नामस्थान के रूप में मौजूद है (और संभवतया एक सिंगलटन, अपने स्वयं के, वैश्विक, राज्य के साथ)।"

यदि ऐसा है, तो दोनों समान रूप से अच्छी तरह से कार्य करेंगे।

module Helper 
    module OwnMethods 
    # Put methods here instead of class << self 
    end 
    extend OwnMethods 
end 

module Variation 
    extend Helper::OwnMethods 
की

class Variation < Helper 

बजाय: अगर कोई मौका आप एक व्युत्पन्न (किसी अन्य वस्तु एक ही तरीके का उत्तराधिकारी) बनाने के लिए चाहते हो सकता है कि के रूप में यह थोड़ा आसान है लिखने के लिए तो आप एक वर्ग का उपयोग करना चाहिए है

हालांकि, केवल नामस्थान के लिए मैं आमतौर पर कक्षा में एक मॉड्यूल का उपयोग करता हूं, क्योंकि एक वर्ग का तात्पर्य है कि तत्कालता उत्पन्न होगी।

2

मॉड्यूल और कक्षा के बीच का अंतर यह है कि आप कक्षा का उदाहरण बना सकते हैं, लेकिन मॉड्यूल नहीं। यदि आपको हेल्पर (एच = हेल्पर.न्यू) का उदाहरण बनाना है तो यह एक वर्ग होना चाहिए। यदि नहीं, तो मॉड्यूल बने रहने के लिए शायद सबसे अच्छा है। मुझे यकीन नहीं है कि आपका शेष कोड प्रश्न के लिए प्रासंगिक है; चाहे आपके पास मॉड्यूल या क्लास पर क्लास विधियां हों, इस बात के लिए प्रासंगिक नहीं है कि आपको उस ऑब्जेक्ट के उदाहरण बनाने की आवश्यकता है या नहीं।

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