2009-12-09 14 views

उत्तर

13

self.salt = का उपयोग salt= विधि का उपयोग करने के लिए किया जाएगा, यदि परिभाषित किया गया है। यह salt= विधि के अंदर किसी भी त्रुटि जांच/परिवर्तन को सुनिश्चित करने के लिए उपयोगी है। हालांकि, इसका मतलब है कि एक स्पष्ट salt= विधि (उदाहरण के लिए संभवतः attr_accessor द्वारा बनाई गई) होनी चाहिए, और यह एक अच्छा विचार नहीं है।

सारांश: यदि आपके पास कस्टम salt= विधि है तो self.salt = का उपयोग करें; @salt = का उपयोग करें यदि आप जानते हैं कि आप @salt क्या चाहते हैं, या यदि आपके पास कस्टम salt= विधि नहीं है।

अंतिम नोट: मैं शायद इस तरह लिखते हैं (मेरी राय में यह एक छोटे से स्पष्ट है)

def create_new_salt 
    @salt = "#{object_id}#{rand}" 
end 

संपादित करें: @ एक और जवाब पर चक की टिप्पणी, मैं इस संशोधित किया धन्यवाद करने के लिए दूर करने के लिए self.-फ्री कोड - यह गलत था।

+0

धन्यवाद पीटर! मैं सहमत हूं, मुझे आपके संस्करण को बेहतर पसंद है। – Kevin

4

पीटर के महान उत्तर के अलावा, मैं आमतौर पर रुबी में संकेत करता हूं कि मैं @attr के बजाय self.attr = और self.attr का उपयोग करके attr_accessor का उपयोग कर रहा हूं।

संपादित करें: "स्वयं" के बिना, आप एक स्थानीय चर बना रहे हैं। ओह।

एक और दिलचस्प बात self.salt= लागू किया जा सकता है कि भले ही नमक = विधि निजी है:

+0

हाँ, ये अच्छे अंक हैं ... – Peter

+2

वास्तव में, रिसीवर के रूप में 'स्वयं' निर्दिष्ट किए बिना 'नमक = 5' लिखना * * एक स्थानीय चर बना देगा। – Chuck

+0

@ चक, यह एक बहुत ही महत्वपूर्ण बिंदु है जिसे मुझे नहीं पता था। मैंने अपना जवाब संशोधित कर दिया है। – Peter

2
पीटर जवाब देने के लिए इसके अलावा

। यह सामान्य रूबी नियम का अपवाद है कि एक स्पष्ट विधि को एक स्पष्ट रिसीवर के साथ नहीं बुलाया जा सकता है।

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