2010-05-01 13 views
5

मैं रुबी पर एक पुस्तक के माध्यम से काम कर रहा हूं, और लेखक ने किताब के पिछले खंडों की तुलना में कक्षा प्रारंभिक परिभाषा लिखने के लिए थोड़ा अलग रूप इस्तेमाल किया।इन दो रूबी क्लास प्रारंभिक परिभाषाओं के बीच क्या अंतर है?

class Ticket 
    attr_accessor :venue, :date 
    def initialize(venue, date) 
    self.venue = venue 
    self.date = date 
    end 
end 

किताब के पिछले अनुभाग में, यह होगा इस तरह परिभाषित किया गया है:

class Ticket 
    attr_accessor :venue, :date 
    def initialize(venue, date) 
    @venue = venue 
    @date = date 
    end 
end 

वहाँ पहले के रूप सेटर विधि का उपयोग कर के बीच किसी भी कार्यात्मक अंतर है, यह इस तरह दिखता है उदाहरण, उदाहरण के रूप में उदाहरण चर का उपयोग कर बनाम बनाम? वे दोनों काम करने लगते हैं। यहां तक ​​कि उन्हें मिश्रण अप काम करता है:

class Ticket 
    attr_accessor :venue, :date 
    def initialize(venue, date) 
    @venue = venue 
    self.date = date 
    end 
end 
+0

+1। –

उत्तर

9

के बाद से सेटर विधि attr_accessor द्वारा परिभाषित किया गया है और इस तरह चर की स्थापना लेकिन कुछ नहीं करता है, वहाँ सेटर विधि का उपयोग कर और चर सीधे निर्धारित करने के बीच कोई अंतर नहीं है।

सेटर विधि का उपयोग करने का एकमात्र उछाल यह है कि यदि आपको बाद में चर सेट करने की तरह कुछ और करने के लिए सेटटर विधि को बदलना चाहिए (जैसे इनपुट को प्रमाणित करना या लॉग करना), तो initialize विधि इन परिवर्तनों से प्रभावित होगी आपको इसे बदलना है। संयोग से प्रोग्रामिंग के लिए

+0

+1 मैंने पाया है कि '@ स्थल' के साथ केवल परिवर्तन 'स्वयं' के साथ परिवर्तन अधिसूचना संभव नहीं है (या मुश्किल और अनियंत्रित है)। यदि कोई विशेषता-आधारित सेटर्स का निरीक्षण करने के तरीके के बारे में जानता है, तो मुझे बताएं;) –

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