In Python können wir "dir" ein Modul, wie folgt aus:Ruby entspricht Pythons "dir"?
>>> import re
>>> dir(re)
Und es listet alle Funktionen im Modul. Gibt es eine ähnliche Möglichkeit, dies in Ruby zu tun?
In Python können wir "dir" ein Modul, wie folgt aus:Ruby entspricht Pythons "dir"?
>>> import re
>>> dir(re)
Und es listet alle Funktionen im Modul. Gibt es eine ähnliche Möglichkeit, dies in Ruby zu tun?
Soweit ich weiß nicht genau, aber man bekommt, irgendwo mit
object.methods.sort
Sie ein Modul nehmen, wie Enumerable
, und senden Sie die methods
Verfahren, welches die Methoden alle das Modul definiert auflistet. Klassen, die dieses Modul enthalten, reagieren auf diese Methoden.
>> 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?"]
ich gehen würde, für so etwas wie folgt aus:
y String.methods.sort
, die Ihnen eine yaml Darstellung der sortierten Array von Methoden geben. Beachten Sie, dass dies verwendet werden kann, um die Methoden von Klassen und Objekten aufzulisten.
Tipp für ein Verfahren in irb „Suche“:
"something".methods.select {|item| item =~ /query/ }
Tipps für die zum Vergleich auf einem Wert Methoden auszuprobieren:
value = "something"
[:upcase, :downcase, :capitalize].collect {|method| [method, value.send(method)] }
Beachten Sie auch, dass Sie nicht alle erhalten die gleichen Informationen wie Pythons dir mit object.methods. Sie müssen eine Kombination aus object.methods und class.constants, also class.singleton_methods verwenden, um die Klassenmethoden zu erhalten.
Nicht wirklich. Wie die anderen sagten, können Sie einen Teil Ihrer Wünsche erfüllen, indem Sie Klasseninstanzmethoden auflisten (z. B. String.instance_methods
), aber das hilft Ihnen nicht, wenn eine geöffnete Datei eine Klasse wieder öffnet (außer Sie checken vorher und nachher).
Wenn Sie keinen programmatischen Zugriff auf die Methodenliste benötigen, sollten Sie die Dokumentation für eine Klasse, ein Modul oder eine Methode mit dem Befehlszeilentool ri
aufrufen.
Ich hätte dies zu Jonelfs Antwort kommentiert, aber anscheinend habe ich nicht genug Rep.
some_object.methods.sort - Object.new.methods
Dies ist nicht genau das, was Sie gefragt wurden, wie andere gesagt haben, aber es gibt Ihnen die Informationen, die Sie nach sind.
Wenn ich deine Frage genau lese, muss ich sie so beantworten: Eine Datei wie in require
in Ruby angegeben, ist nur ein Container und muss keine Beziehung zu einer Klasse haben. Der Inhalt kann sein:
oder eine beliebige Kombination der oben genannten, mehrmals. Sie können also nicht direkt nach allen Methoden in einer Datei fragen.
Wenn Sie alle Methoden eines bestimmten Moduls oder einer Klasse auflisten möchten, sind die anderen Antworten das, wonach Sie suchen (hauptsächlich unter Verwendung der #methods
-Methode für einen Modulnamen oder eine Klasse).
Ich mag in meinem .irbrc haben:
class Object
def local_methods
(methods - Object.instance_methods).sort
end
end
Also, wenn ich in irb bin:
>> 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"]
Oder sogar cuter - mit grep:
>> Time.now.local_methods.grep /str/
=> ["strftime"]
Vielleicht nicht die ursprüngliche Frage zu beantworten (hängt vom Anwendungsfall ab), aber für diejenigen, die danach suchen, wird diese imverwendet Nur 10, können Sie "Doppel-TAB" für Autovervollständigung verwenden. Dies kann effektiv (fast alle) die für ein bestimmtes Objekt verfügbaren Methoden auflisten.
Setzen Sie die folgende Zeile in Ihre ~/.irbrc
Datei:
require 'irb/completion'
nun (wieder) die irb
starten, starten Sie eine Methode eingeben und drücken Sie TAB zweimal - irb autocompletes die Eingabe!
ich lernte es tatsächlich hier: http://drnicwilliams.com/2006/10/12/my-irbrc-for-consoleirb/
dir() ** auch Variablen enthält **, die in diesem Rahmen festgelegt wurden - nicht nur definierte Funktionen. – daf
Siehe auch: http://stackoverflow.com/questions/2009730/ruby-equivalent-to-pythons-help –