सीधे एक इंस्टेंस चर का उपयोग करके एक इंस्टेंस चर का उपयोग करना


80

क्या कोई उदाहरण विशेषता के माध्यम से self.attributeऔर इसके द्वारा एक्सेस करने के बीच के अंतर को समझा सकता है @attribute?

जवाबों:


100

self.attributeविधि को बुलाता है attribute।
self.attribute = valueविधि attribute=को तर्क से पुकारता है value।
@attributeऔर @attribute = valueइंस्टेंस वैरिएबल का मान प्राप्त / सेट करें @attribute।

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

हालाँकि अगर आप attr_accessor :attributeइसे कहते हैं तो attributeलौटने @attributeकी विधि attribute=(value)और सेट करने की विधि को परिभाषित करता है @attribute = value। तो उस स्थिति में, कोई अंतर नहीं है।


14
ध्यान दें कि यह आम तौर पर उपयोग करने के लिए अनुशंसित है self.(जब तक कि आप गेटर / सेटर विधि नहीं लिख रहे हैं) भले ही वर्तमान में आपके पास हो attr_accessor। अगर आप बाद में एक्सेसर मेथड को बदलते हैं और इंस्टेंस वैरिएबल सेट करते हैं तो यह आपको अतिरिक्त रिफैक्टर और बग्स से बचाता है। (या अगर कोई और आपके काम को
— तोड़

6
Phrogz में से एक बग के बारे में बात कर रहा है, अगर आप केवल self =attribute = ______ के बजाय विशेषता = _____ कहते हैं, तो आप उदाहरण चर के बजाय एक स्थानीय चर सेट कर रहे हैं।
— जेसन नोबल

3

"एक्सेसिंग वेरिएबल को सीधे एक्सेस करने के तरीकों से एक्सेस करने की तुलना में लगभग दो गुना तेज है"

बाहर की जाँच करें: https://www.greyblake.com/blog/2012-09-01-ruby-perfomance-tricks/


1
लिंक टूट गया है। यह एक काम करता है: greyblake.com/blog/2012-09-01-ruby-perfomance-tricks
— nbkhope
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.