どのように私はRubyで物事をイントロスペクトしますか?
-
21-09-2019 - |
質問
私は、オブジェクトのすべての属性を取得したい場合たとえば、Pythonで、私はこのようなことを行うことができます:
>>> 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)
はRubyで同様のことを行うにはどのような方法がありますか?
解決
確かに、それはPythonでよりもさらに簡単です。あなたが探しているものの情報に応じて、試してみてください。
obj.methods
と
(同様Object
のメソッドを取得ではなく)あなたがobjのために定義されたメソッドだけをしたい場合
obj.methods - Object.methods
また、興味深いのは、次のようなものをやっています
obj.methods.grep /to_/
インスタンス変数を取得するには、この操作を行います。
obj.instance_variables
とクラス変数のために:
obj.class_variables
他のヒント
あなたが使用よりも、何かに呼び出すことができることをすべてのメソッドをしたい場合は、
>>> x.methods
あなたには、いくつかのヘルプ情報が必要な場合は、そのクラスの前にヘルプを呼び出す
>>> help x.class
ヘルプIRB内里のラッパーです。
あなたがオブジェクトを持っている、とあなたはそれが何に反応する方法を知りたい場合は、(thenduksがこの結果に言及したことやトリックのすべて。)obj.methods
を実行することができます。
あなたはクラスを持っている場合は、クラスメソッドが空く何であるかを見るためにklass.methods
を実行することができ、あるいはあなたがそのクラスのインスタンスで使用可能な方法を知っているklass.instance_methods
を実行することができます。それは、クラスで定義され、継承されていなかった何方法を説明しますbecuase klass.instance_methods(false)
は、便利です。
ルビー内のpythonが行う方法を方法のヘルプテキストを取得する方法が今あります。
Rubyで作成された各オブジェクトに含まれているObjectSpace
と呼ばれるモジュールがあります。それはあなたがプロセスの現在のコンテキストをイントロスペクトヘルプというメソッドのすべてを保持しています。 IRBでは、現在のirbセッションのトップレベルのコンテキストでObject:Main
コンテキストで始まります。その後、time = Time.now
ような何かをして、そのオブジェクトのコンテキストにあなたを取るだろうし、あなたがそのオブジェクトのirb time
メソッドを呼び出すことなく、内側からそれを点検できObjectSpace
を行うことができます。