2012-05-18 12 views
7

में attr_accessor/instance variables प्राप्त करें, इसलिए मुझे पता है कि आप #instance_variables पर कॉल करके रूबी में सभी इंस्टेंस चर प्राप्त कर सकते हैं, लेकिन यदि वे अभी तक सेट नहीं किए गए हैं तो वे दिखाई नहीं देते हैं।ruby ​​

उदाहरण

class Walrus 
    attr_accessor :flippers, :tusks 
end 

w = Walrus.new 
w.instance_variables # => [] 
w.tusks    # => nil 
w.instance_variables # => [:@tusks] 

मैं तुरंत attr_accessor द्वारा परिभाषित उदाहरण चर के सभी का उपयोग करना चाहते हैं।

w = Walrus.new 
w.instance_variables # => [:@tusks, :@flippers] 
+0

के संभावित डुप्लिकेट ([कैसे विशेषताओं है कि या attr \ _accessor attr \ _reader के माध्यम से परिभाषित किया गया पाने के लिए] http://stackoverflow.com/questions/10006889/how-to-get-attributes-that-were से परिभाषित-थ्रू-attr-रीडर या attr-एक्सेसर) –

उत्तर

15

ठीक है, वे अभी तक मौजूद नहीं हैं। इंस्टेंस वैरिएबल पहले असाइनमेंट पर अस्तित्व में वसंत। यदि आप उन्हें एक नए नए उदाहरण में चाहते हैं, तो उन्हें कन्स्ट्रक्टर में स्पर्श करें।

class Walrus 
    attr_accessor :flippers, :tusks 

    def initialize 
    self.flippers = self.tusks = nil 
    end 
end 

w = Walrus.new 
w.instance_variables # => [:@tusks, :@flippers] 
5

खैर, attr_accessor तरीकों की एक जोड़ी, एक सेटर और एक गेटर पैदा करता है। मुझे यकीन है कि वहाँ अगर एक अंतर्निहित तरीका एक सूची प्राप्त करने नहीं कर रहा हूँ, लेकिन आप जिसके परिणामस्वरूप जोड़े के लिए उदाहरण के तरीकों के माध्यम से दे सकता है:

Walrus.instance_methods.find_all do |method| 
    method != :== && 
    method != :! && 
    Walrus.instance_methods.include?(:"#{method}=") 
end 
0

कैसे तरीकों शून्य से वस्तु या कक्षा से तरीकों का उपयोग कर के बारे में? रिटर्निंग सरणी में आपके परिभाषित गुण/विधियां, और गेटटर/एक्सेसर में परिभाषित आवृत्ति चर शामिल होंगे।

your_instance_name.methods - Object.methods 
your_instance_name.methods - Class.methods