2010-03-22 13 views
21

उदाहरण के लिए, पायथन में, मैं चीजों को इस तरह से कर सकते हैं अगर मैं एक वस्तु पर सभी विशेषताओं प्राप्त करना चाहते हैं:रूबी में चीजों का आत्मनिरीक्षण कैसे करूं?

>>> import sys 
>>> dir(sys) 
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'py3kwarning', 'pydebug', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions'] 

या अगर मैं कुछ के प्रलेखन को देखना चाहते हैं, मैं मदद फ़ंक्शन का उपयोग कर सकते हैं:

>>> help(str) 

क्या रूबी में समान काम करने का कोई तरीका है?

+1

वास्तव में एक उत्तर दें, लेकिन मूल जानकारी के लिए आप देख सकते हैं: http://ruby-doc.org/core/ –

+0

इस सूची को देखें http://www.khelll.com/blog/ruby/ruby-introspection/ – khelll

उत्तर

38

निश्चित रूप से, यह पायथन से भी आसान है। क्या जानकारी आप देख रहे हैं पर निर्भर करता है, की कोशिश:

obj.methods 

और तुम सिर्फ तरीकों (और साथ ही Object पर हो रही है तरीकों के खिलाफ) obj के लिए परिभाषित

obj.methods - Object.methods 

भी दिलचस्प है चाहता हूँ कर सामान की तरह:

obj.methods.grep /to_/ 

उदाहरण चर पाने के लिए, ऐसा करते हैं:

obj.instance_variables 

और वर्ग चर के लिए:

obj.class_variables 
+2

जहां तक ​​प्रलेखन आमतौर पर rdoc के माध्यम से या खोल में समान होता है, और दुभाषिया में नहीं। – rfunduk

+0

लेकिन अगर मैं सिर्फ तरीकों से अधिक की तलाश में हूं तो क्या होगा? अगर मैं उदाहरण या वर्ग चर चाहता हूं तो क्या होगा? –

+0

इसके अलावा @thenduks - कभी-कभी मैं पहले से ही irb में हूं और कुछ पर जानकारी चाहता हूं। इससे बाहर निकलने के लिए दर्द का थोड़ा सा दर्द है, rdoc पढ़ें, और फिर irb में वापस जाओ। –

4

का उपयोग की तुलना में

>>> x.methods 

आप सभी तरीकों है कि आप कुछ पर कॉल कर सकते हैं चाहते हैं तो आप कुछ मदद की जानकारी तो अपने वर्ग

से पहले सहायता फोन चाहते हैं
>>> help x.class 

सहायता irb के भीतर ri के लिए एक रैपर है।

1

आप एक वस्तु है, और आप को पता है कि तरीकों यह, आप obj.methods चला सकते हैं का जवाब चाहते हैं

आप एक वर्ग है (और चालें कि thenduks इस परिणाम पर उल्लेख किया गया है। के सभी), आप क्लास विधियों का लाभ उठाने के लिए klass.methods चला सकते हैं, या आप यह जानने के लिए klass.instance_methods चला सकते हैं कि कक्षा के उदाहरणों पर कौन सी विधियां उपलब्ध हैं। klass.instance_methods(false) उपयोगी है, क्योंकि यह आपको बताता है कि कक्षा द्वारा किस तरीके को परिभाषित किया गया था और विरासत में नहीं मिला था।

अब रूबी के रास्ते में रूबी के भीतर एक विधि के लिए सहायता पाठ प्राप्त करने का कोई तरीका है।

1

ObjectSpace नामक एक मॉड्यूल है जिसे रूबी में बनाए गए प्रत्येक ऑब्जेक्ट में शामिल किया गया है। इसमें सभी विधियां हैं जो आपको प्रक्रिया के वर्तमान संदर्भ का आत्मनिरीक्षण करने में मदद करती हैं। Irb में आप Object:Main संदर्भ में शुरू करते हैं जो वर्तमान irb सत्र के लिए शीर्ष स्तर संदर्भ है। फिर आप time = Time.now जैसे कुछ कर सकते हैं और फिर irb time कर सकते हैं जो आपको उस ऑब्जेक्ट के संदर्भ में ले जाएगा और आप उस ऑब्जेक्ट पर ObjectSpace विधियों को कॉल किए बिना अंदर से इसका निरीक्षण कर सकते हैं।

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