2010-03-22 15 views
21

Zum Beispiel in Python, kann ich Dinge wie dies tut, wenn ich alle Attribute für ein Objekt erhalten mag:Wie kann ich Dinge in Ruby inspizieren?

>>> 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'] 

Oder wenn ich die Dokumentation von etwas sehen möchte, kann ich die Hilfe-Funktion verwenden:

>>> help(str) 

Gibt es eine Möglichkeit, ähnliche Dinge in Ruby zu tun?

+1

Hinweis wirklich eine Antwort, aber für die wichtigsten Informationen können Sie sehen: http://ruby-doc.org/core/ –

+0

Überprüfen Sie diese Liste http://www.khell.com/Blog/ruby/ruby-introspection/ – khelll

Antwort

38

Sicher, es ist noch einfacher als in Python. Je nachdem, welche Informationen Sie suchen, versuchen:

obj.methods 

und wenn Sie wollen nur die für obj definierten Methoden (im Gegensatz zu bekommen Methoden auf Object auch)

obj.methods - Object.methods 

interessant Auch ist Dinge tun, wie:

obj.methods.grep /to_/ 

Um Instanzvariablen zu erhalten, dies tun:

und für Klassenvariablen:

obj.class_variables 
+2

Für die Dokumentation wird dies normalerweise über Rdoc oder Ähnliches in der Shell und nicht im Interpreter gemacht. – rfunduk

+0

Aber was, wenn ich mehr als nur Methoden suche? Wie wenn ich Instanz- oder Klassenvariablen möchte? –

+0

Auch @thenduks - manchmal bin ich schon in irb und will Infos über etwas. Es ist ein bisschen mühsam, wenn man rausgeht, den rdoc liest und dann wieder in irb geht. –

4

Wenn Sie alle Methoden wollen, dass Sie auf etwas nennen kann, als verwenden

>>> x.methods 

Wenn Sie etwas Hilfe Informationen wollen, dann Hilfe rufen vor seiner Klasse

>>> help x.class 

Hilfe ist ein Wrapper für Ri innerhalb Irb.

1

Wenn Sie ein Objekt haben, und Sie wollen wissen, welche Methoden es reagiert, können Sie obj.methods (und all die Tricks, die thenduks auf diesem Ergebnis erwähnt.) Laufen

Wenn Sie eine Klasse haben, Sie können klass.methods ausführen, um zu sehen, welche Klassenmethoden verfügbar sind, oder Sie können klass.instance_methods ausführen, um zu wissen, welche Methoden für Instanzen dieser Klasse verfügbar sind. klass.instance_methods(false) ist nützlich, weil es Ihnen sagt, welche Methoden von der Klasse definiert und nicht geerbt wurden.

Es gibt jetzt Weg, um Hilfetext für eine Methode in Ruby zu erhalten, wie es Python tut.

1

Es gibt ein Modul namens ObjectSpace, das in jedem in ruby ​​erstellten Objekt enthalten ist. Es enthält alle Methoden, die Ihnen helfen, den aktuellen Kontext des Prozesses zu untersuchen. In irb beginnen Sie in Object:Main Kontext, der oberste Ebene Kontext für aktuelle IRB-Sitzung ist. Dann könnten Sie etwas wie time = Time.now machen und dann irb time machen, was Sie in den Kontext dieses Objekts bringen würde und Sie könnten es von innen untersuchen, ohne ObjectSpace Methoden für dieses Objekt aufzurufen.

Verwandte Themen