24

たとえば、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で同様のことを行う方法はありますか?

4

4 に答える 4

41

確かに、Python よりもさらに簡単です。探している情報に応じて、次のことを試してください。

obj.methods

obj に定義されたメソッドだけが必要な場合 (メソッドを取得するのでObjectはなく)

obj.methods - Object.methods

また興味深いのは、次のようなことです。

obj.methods.grep /to_/

インスタンス変数を取得するには、次のようにします。

obj.instance_variables

クラス変数の場合:

obj.class_variables
于 2010-03-22T14:05:01.717 に答える
6

使用するよりも何かで呼び出すことができるすべてのメソッドが必要な場合

>>> x.methods

ヘルプ情報が必要な場合は、そのクラスの前に help を呼び出します

>>> help x.class

Help は irb 内の ri のラッパーです。

于 2010-03-22T14:07:14.617 に答える
2

ruby で作成された各オブジェクトには、というモジュールObjectSpaceが含まれています。プロセスの現在のコンテキストを内省するのに役立つすべてのメソッドを保持しています。Object:Mainirb では、現在の irb セッションの最上位コンテキストであるコンテキストから開始します。次にtime = Time.nowirb timeそのオブジェクトのコンテキストに移動し、そのオブジェクトのメソッドを呼び出さずに内部から調べることができObjectSpaceます。

于 2010-03-22T14:36:15.753 に答える
2

オブジェクトがあり、それがどのメソッドに応答するかを知りたい場合は、実行できますobj.methods(そして、nduks がこの結果について言及したすべてのトリック)。

クラスがある場合は、実行して、利用可能klass.methodsなクラス メソッドを確認したり、実行klass.instance_methodsして、そのクラスのインスタンスで利用可能なメソッドを確認したりできます。klass.instance_methods(false)クラスによって定義され、継承されていないメソッドがわかるため、便利です。

Python と同じ方法で、Ruby 内のメソッドのヘルプ テキストを取得する方法が追加されました。

于 2010-03-22T14:08:03.580 に答える