आप अपने कोड को पढ़ने वाले किसी व्यक्ति को अपने इरादे से संवाद करने के लिए अलग-अलग एक्सेसर्स का उपयोग कर सकते हैं, और कक्षाओं को लिखना आसान बनाते हैं जो सही ढंग से काम करेंगे, इससे कोई फर्क नहीं पड़ता कि उनके सार्वजनिक एपीआई को कैसे बुलाया जाता है।
class Person
attr_accessor :age
...
end
यहां, मैं देख सकता हूं कि मैं दोनों उम्र पढ़ और लिख सकता हूं।
class Person
attr_reader :age
...
end
यहां, मैं देख सकता हूं कि मैं केवल उम्र पढ़ सकता हूं। कल्पना कीजिए कि यह इस वर्ग के निर्माता द्वारा निर्धारित है और उसके बाद स्थिर रहता है। यदि उम्र के लिए एक उत्परिवर्ती (लेखक) था और कक्षा को यह माना जाता था कि उम्र, एक बार सेट हो जाती है, तो बदलती नहीं है, तो एक बग कोडक कॉलिंग से परिणामस्वरूप हो सकता है।
लेकिन दृश्यों के पीछे क्या हो रहा है?
आप लिखते हैं:
attr_writer :age
में अनुवाद किया जाता है यही कारण है कि:
def age=(value)
@age = value
end
यदि आप लिखना:
def age
@age
end
:
attr_reader :age
में अनुवाद किया जाता है यही कारण है कि 10
यदि आप लिखना:
attr_accessor :age
में अनुवाद किया जाता है यही कारण है कि:
def age=(value)
@age = value
end
def age
@age
end
कि जानने के बाद, यहाँ एक और तरीका है इसके बारे में सोचने के लिए है: आप attr _... सहायकों आपके पास नहीं था, और खुद को एक्सेसर्स लिखना था, क्या आप अपनी कक्षा की तुलना में और अधिक एक्सेसर्स लिखेंगे? उदाहरण के लिए, यदि उम्र केवल पढ़ने की आवश्यकता है, तो क्या आप इसे लिखने की अनुमति देने के लिए एक विधि भी लिखेंगे?
स्रोत
2011-02-18 21:43:27
मैं केवल यही चाहता हूं कि वे इसे दस्तावेज करेंगे। http://api.rubyonrails.org/?q=attr_reader – Chloe
@Chloe आप गलत जगह पर देख रहे हैं! यह एक रूबी विधि है, न कि * रेल *: http://www.ruby-doc.org/core-2.1.2/Module.html#method-i-attr_reader –
संभव डुप्लिकेट [रूबी में attr \ _accessor क्या है ?] (http://stackoverflow.com/questions/4370960/what-is-attr-accessor-in-ruby) – sschuberth