2011-01-09 24 views

उत्तर

97

self.attribute विधि attribute पर कॉल करता है।
self.attribute = value तर्क value के साथ विधि को कॉल करता है।
@attribute और @attribute = value आवृत्ति चर @attribute के मान को प्राप्त/सेट करें।

तो मूल रूप से वे दो पूरी तरह से अलग चीजें हैं।

लेकिन यदि आप attr_accessor :attribute फोन यह विधि attribute@attribute वापस जाने के लिए और विधि attribute=(value)@attribute = value स्थापित करने के लिए परिभाषित करता है। तो उस मामले में, कोई फर्क नहीं पड़ता।

+14

नोट यह आम तौर पर 'self.' उपयोग करने के लिए (जब तक आप कर रहे हैं की सिफारिश की है कि गेटर/सेटर विधि लिखना) भले ही आप _currently_ में 'attr_accessor' है। यह आपको अतिरिक्त रिफैक्टर काम और बग से बचाता है यदि आप बाद में आवृत्ति विधि को प्राप्त/सेट करने के अलावा अधिक करने के लिए एक्सेसर विधि (ओं) को बदलते हैं। (या यदि कोई और आपके काम को पैच या उप-वर्गीकृत करता है।) – Phrogz

+6

फर्गज़ के बारे में बात करने वाली बग्स में से एक यह है कि अगर आप self.attribute = ______ के बजाय विशेषता = _____ को कॉल करते हैं तो आप आवृत्ति चर के बजाय स्थानीय चर सेट कर रहे हैं। –

1

"तक पहुंचना उदाहरण चर उन्हें सीधे एक्सेसर तरीकों के साथ तक पहुँचने से लगभग दो गुना तेजी से है"

की जाँच करें: http://greyblake.com/blog/2012/09/02/ruby-perfomance-tricks/

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