As far as I know not exactly but you get somewhere with
object.methods.sort
I like to have this in my .irbrc:
class Object
def local_methods
(methods - Object.instance_methods).sort
end
end
So when I'm in irb:
>> 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"]
Or even cuter - with grep:
>> Time.now.local_methods.grep /str/
=> ["strftime"]
Tip for "searching" for a method in irb:
"something".methods.select {|item| item =~ /query/ }
Tip for trying out methods on a value for comparison:
value = "something"
[:upcase, :downcase, :capitalize].collect {|method| [method, value.send(method)] }
Also, note that you won't get all the same information as Python's dir with object.methods. You have to use a combination of object.methods and class.constants, also class.singleton_methods to get the class methods.
You can take a module, such as Enumerable
, and send the methods
method which lists all the methods the module defines. Classes that include this module will respond to these 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?"]
I'd go for something like this:
y String.methods.sort
Which will give you a yaml representation of the sorted array of methods. Note that this can be used to list the methods of both classes and objects.
Maybe not answering the original question (depends on the use case), but for those who are looking for this to be used in the irb
only, you can use "double-TAB" for autocompletion. Which, effectively, can also list (almost all) the methods available for a given object.
Put the following line into your ~/.irbrc
file:
require 'irb/completion'
Now, (re)start the irb
, start typing a method and hit TAB twice - irb autocompletes the input!
I actually learned it here: http://drnicwilliams.com/2006/10/12/my-irbrc-for-consoleirb/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With