2010-02-04 3 views
7

मैं स्रोत और स्रोत क्रमशः cattr_* और mattr_* विधियों के बीच अंतर के बीच अंतर को देखने से बाहर काम नहीं कर सकता। मैंने यह प्रश्न पढ़ा: What is mattr_accessor in a Rails module? जो दोनों विधियों के बारे में कुछ विवरण देता है लेकिन मतभेदों को हाइलाइट नहीं करता है।ActiveSupport में mattr_accessor और cattr_accessor के बीच अंतर?

तो मेरा सवाल यह है कि उनके बीच क्या अंतर है और हमें स्रोतों के दोनों सेटों की आवश्यकता क्यों होती है जब वे स्रोत में व्यावहारिक रूप से समान होते हैं? इसके अलावा, हमें कब उपयोग करना चाहिए?

उत्तर

10

Module वर्ग Class इसलिए यदि एक उपयुक्त सामान्य नाम की तो परिभाषित करने accessors के लिए तरीके Module पर डाला जा सकता है और यह मॉड्यूल और वर्गों के लिए काम करेगा सोचा जा सकता है की सुपर क्लास है। ध्यान दें कि अनुवर्ती काम करता है:

class Bar 
    mattr_accessor :test 
end 

लेकिन

module Foo 
    cattr_accessor :test 
end 

कार्य नहीं करेगा।

तरीकों कि कक्षाओं के अंदर इस्तेमाल किया जाना चाहिए पर एक उपसर्ग और मॉड्यूल के अंदर उपयोग के लिए तरीकों पर एक मीटर उपसर्ग होने सिर्फ अपने कोड थोड़ा स्पष्ट करने में मदद करता है।

+0

तो कार्यात्मक रूप से वे पूरी तरह से समकक्ष हैं? इसके अलावा, इससे मुझे आश्चर्य होता है कि रेलवे स्रोत में उन्हें क्यों नहीं डाला गया है क्योंकि विधि निकाय समान हैं ... – tobyclemson

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