2009-01-22 14 views
46

अजगर में हम "dir" एक मॉड्यूल कर सकते हैं, इस तरह:रूबी पाइथन के "डीआईआर" के बराबर है?

>>> import re 
>>> dir(re) 

और यह मॉड्यूल में सभी कार्यों को सूचीबद्ध करता है। रूबी में ऐसा करने का एक समान तरीका है?

+0

dir() ** भी चर ** कि कि दायरे में स्थापित किए गए हैं शामिल हैं - न सिर्फ कार्यों को परिभाषित किया। – daf

+0

यह भी देखें: http://stackoverflow.com/questions/2009730/ruby-equivalent-to-pythons-help –

उत्तर

47

जहाँ तक मुझे वास्तव में नहीं पता, लेकिन आप

object.methods.sort 
4

साथ कहीं जाना आप इस तरह के Enumerable के रूप में, एक मॉड्यूल ले जा सकते हैं, और methods विधि है जो सभी तरीकों मॉड्यूल को परिभाषित करता है सूचीबद्ध करता है भेजने के रूप में। इस मॉड्यूल को शामिल करने वाले वर्ग इन तरीकों का जवाब देंगे।

>> Enumerable.methods 
=> ["inspect", "private_class_method", "const_missing", "clone", "method", "public_methods", "public_instance_methods", "instance_variable_defined?", "method_defined?", "equal?", "freeze", "included_modules", "const_get", "yaml_as", "methods", "respond_to?", "module_eval", "class_variables", "dup", "protected_instance_methods", "instance_variables", "public_method_defined?", "__id__", "object_id", "taguri", "yaml_tag_read_class", "eql?", "const_set", "id", "to_yaml", "taguri=", "singleton_methods", "send", "class_eval", "taint", "frozen?", "instance_variable_get", "include?", "private_instance_methods", "__send__", "instance_of?", "private_method_defined?", "to_a", "name", "to_yaml_style", "autoload", "type", "yaml_tag_class_name", "<", "protected_methods", "instance_eval", "<=>", "==", ">", "display", "===", "instance_method", "instance_variable_set", "to_yaml_properties", "kind_of?", "extend", "protected_method_defined?", "const_defined?", ">=", "ancestors", "to_s", "<=", "public_class_method", "hash", "class", "instance_methods", "tainted?", "=~", "private_methods", "class_variable_defined?", "nil?", "untaint", "constants", "autoload?", "is_a?"] 
1

मैं कुछ इस तरह के लिए जाना चाहते हैं:

y String.methods.sort 

जो तुम तरीकों में से क्रमबद्ध सरणी के एक YAML प्रतिनिधित्व दे देंगे। ध्यान दें कि इसका उपयोग कक्षाओं और वस्तुओं दोनों के तरीकों की सूची के लिए किया जा सकता है। तुलना के लिए एक मूल्य पर तरीकों को आज़माने के लिए

"something".methods.select {|item| item =~ /query/ } 

युक्ति:: एक विधि के लिए "खोज" आईआरबी में के लिए

4

टिप

value = "something" 
[:upcase, :downcase, :capitalize].collect {|method| [method, value.send(method)] } 

इसके अलावा, ध्यान दें कि आप सब नहीं मिलेगा object.methods के साथ पाइथन के डीआईआर के समान जानकारी। क्लास विधियों को प्राप्त करने के लिए आपको object.methods और class.constants, class.singleton_methods के संयोजन का उपयोग करना होगा।

0

वास्तव में नहीं। अन्य लोगों की तरह, आप क्लास इंस्टेंस विधियों को सूचीबद्ध करके जो चाहते हैं उसका हिस्सा प्राप्त कर सकते हैं (उदा। String.instance_methods) लेकिन यदि आपकी फ़ाइल खोलने वाली फ़ाइल को फिर से खोलने पर आपकी सहायता नहीं होती है (जब तक आप पहले और बाद में चेक नहीं करते)।

यदि आपको विधियों की सूची में प्रोग्रामेटिक पहुंच की आवश्यकता नहीं है, तो ri कमांड लाइन टूल का उपयोग कर कक्षा, मॉड्यूल या विधि के लिए दस्तावेज़ों को देखने पर विचार करें।

0

मैं इसे स्वयं के जवाब पर टिप्पणी करता, लेकिन स्पष्ट रूप से मेरे पास पर्याप्त प्रतिनिधि नहीं है।

some_object.methods.sort - Object.new.methods

यह नहीं है के रूप में अन्य लोगों ने कहा कि आप वास्तव में क्या पूछ रहे थे, लेकिन यह आप की जानकारी के बाद आप कर रहे हैं देता है।

0

यदि मैं आपके प्रश्न को कठोर रूप से पढ़ता हूं, तो मुझे इसका जवाब देना होगा: रुबी में require द्वारा निर्दिष्ट फ़ाइल केवल एक कंटेनर है और इसकी आवश्यकता वर्ग के साथ कोई संबंध नहीं है। सामग्री हो सकती है:

  • एक वर्ग
  • एक मॉड्यूल
  • सादा कोड

या इसके बाद, कई बार के किसी भी संयोजन। तो आप किसी दिए गए फ़ाइल में सीधे सभी विधियों के लिए नहीं पूछ सकते हैं।

यदि आप किसी दिए गए मॉड्यूल या कक्षा के सभी तरीकों को सूचीबद्ध करना चाहते हैं, तो अन्य उत्तरों जो आप चाहते हैं (मुख्य रूप से मॉड्यूल नाम या कक्षा पर #methods विधि का उपयोग करके)।

17

मैं अपने .irbrc में इस लेना पसंद:

class Object 
    def local_methods 
    (methods - Object.instance_methods).sort 
    end 
end 

तो जब मैं आईआरबी में हूँ:

>> Time.now.local_methods 
=> ["+", "-", "<", "<=", "<=>", ">", ">=", "_dump", "asctime", "between?", "ctime", "day", "dst?", "getgm", "getlocal", "getutc", "gmt?", "gmt_offset", "gmtime", "gmtoff", "hour", "isdst", "localtime", "mday", "min", "mon", "month", "sec", "strftime", "succ", "to_f", "to_i", "tv_sec", "tv_usec", "usec", "utc", "utc?", "utc_offset", "wday", "yday", "year", "zone"] 

या यहां तक ​​कि अधिक आकर्षक - ग्रेप साथ:

>> Time.now.local_methods.grep /str/ 
=> ["strftime"] 
+0

बहुत बहुत धन्यवाद, रूबी पाइथन से आ रहा है और यह एक बड़ी मदद है। – edef

+0

बस आपके विधि के नाम के बारे में उत्सुक, एक "स्थानीय" विधि क्या है? चूंकि वैश्विक विधियां स्थैतिक विधियां हैं, इसलिए मैं अनुमान लगा रहा हूं कि स्थानीय विधियां उदाहरण विधियां हैं? – Dennis

0

हो सकता है कि मूल प्रश्न का उत्तर न दें (उपयोग के मामले पर निर्भर करता है), लेकिन उन लोगों के लिए जोमें इसका उपयोग करने के लिए देख रहे हैं केवल 10, आप स्वत: पूर्णता के लिए "डबल-टैब" का उपयोग कर सकते हैं। जो, प्रभावी रूप से, किसी दिए गए ऑब्जेक्ट के लिए उपलब्ध विधियों (लगभग सभी) को भी सूचीबद्ध कर सकता है।

अपने ~/.irbrc फ़ाइल में निम्न पंक्ति रखो:

require 'irb/completion' 

अब, (री) irb शुरू करते हैं, एक विधि टाइप करना आरंभ करें और दो बार टैब मारा - इनपुट आईआरबी पूर्ण हो जाता है!

मैं वास्तव में इसे यहाँ सीखा: http://drnicwilliams.com/2006/10/12/my-irbrc-for-consoleirb/

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