2011-01-12 11 views
17

मुझे आश्चर्य है कि रूबी विधि कॉल है जो केवल रूबी ऑब्जेक्ट द्वारा परिभाषित विधियों को दिखाती है, जिसे इसके पूर्वजों के वर्गों द्वारा परिभाषित सभी विधियों के विपरीत, methods ऐसा लगता है।मैं रूबी ऑब्जेक्ट के तरीकों का निरीक्षण कैसे करूं?

उत्तर

30

methods एक वैकल्पिक बुलियन पैरामीटर लेता है, जो निर्दिष्ट करता है कि ऑब्जेक्ट की कक्षा और उसके सुपरक्लास या केवल ऑब्जेक्ट के सिंगलटन विधियों से विधियों को सूचीबद्ध करना है या नहीं। तो आप को केवल obj पर परिभाषित सिंगलटन विधियों को प्राप्त करने के लिए कर सकते हैं।

आप तरीकों वस्तु के वर्ग द्वारा परिभाषित चाहते हैं, लेकिन इसकी सुपर-क्लास द्वारा परिभाषित उन नहीं, तो आप वस्तु के वर्ग पर instance_methods(false) फोन करके कि प्राप्त कर सकते हैं, तो यह obj.class.instance_methods(false) है।

1

आपके पास कुछ विकल्प हैं - object.methods, object.public_methods, object.singleton_methods ... यह आपके इच्छित चीज़ों पर निर्भर करता है।

# obj is the current object 
parent = obj.class.superclass 

methods = (obj.methods - parent.methods) 
+1

आपका मतलब है 'parent = obj.class.superclass', है ना? – sepp2k

+1

'जो भी। Methods' रूबी के संस्करण में' ऐरे 'देता है मैं चल रहा हूं। 'Whatever.public_methods' के साथ ही। – cHao

+0

@ sepp2k - हाँ, धन्यवाद - तय! – sethvargo

4

मैं obj.methods.sort को आंशिक हूँ लेकिन के रूप में वे

तुम भी उपयोग कर सकते हैं का वर्णन अन्य उत्तर में से कुछ कुछ मामलों में बेहतर कर रहे हैं: के बाद से वे दोनों एक सरणी लौटने के लिए, आप की तरह कुछ करने की कोशिश करना चाहते हो सकता है Regexp से मेल खाने वाले विधि नाम खोजने के लिए obj.methods.sort.grep /foo/। यह सहायक होता है जब आपको पता चलता है कि आप क्या खोज रहे हैं।

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