web-dev-qa-db-ja.com

Ruby Pythonの「dir」に相当しますか?

Pythonでは、次のようにモジュールを「dir」できます。

>>> import re
>>> dir(re)

また、モジュール内のすべての機能が一覧表示されます。 Rubyでこれを行う同様の方法はありますか?

50
HelpMe

私の知る限りでは正確ではありませんが、あなたはどこかに行きます

object.methods.sort
54
Jonas Elfström

私はこれを私の.irbrcに入れるのが好きです:

class Object
  def local_methods
    (methods - Object.instance_methods).sort
  end
end

だから私が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"]

またはさらにかわいい-grepを使用:

>> Time.now.local_methods.grep /str/
=> ["strftime"]
20
Commander Keen

Irbでメソッドを「検索」するためのヒント:

"something".methods.select {|item| item =~ /query/ }

比較のために値のメソッドを試すためのヒント:

value = "something"
[:upcase, :downcase, :capitalize].collect {|method| [method, value.send(method)] }

また、object.methodsを使用してPythonのディレクトリと同じ情報をすべて取得できるわけではないことに注意してください。クラスメソッドを取得するには、object.methodsとclass.constantsの組み合わせ、およびclass.singleton_methodsを使用する必要があります。

4
method

Enumerableなどのモジュールを取得し、モジュールが定義するすべてのメソッドをリストする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?"]
4
dylanfm

元の質問に答えていない可能性がありますが(ユースケースによって異なります)、これをirbでのみ使用することを探している場合は、オートコンプリートに「double-TAB」を使用できます。これは、事実上、特定のオブジェクトで使用可能なメソッドを(ほとんどすべて)リストすることもできます。

~/.irbrcファイルに次の行を入力します。

require 'irb/completion'

ここで、irbを(再)開始し、メソッドの入力を開始して、Tabキーを2回押します-irbは入力をオートコンプリートします!

私は実際にここでそれを学びました: http://drnicwilliams.com/2006/10/12/my-irbrc-for-consoleirb/

1
Timur

私はこのようなものに行きます:

y String.methods.sort

これにより、ソートされたメソッドの配列のyaml表現が得られます。これは、クラスとオブジェクトの両方のメソッドを一覧表示するために使用できることに注意してください。

1
Codebeef

あんまり。他の人が言ったように、クラスインスタンスメソッドをリストすることで、必要なものの一部を取得できます(例:String.instance_methods)しかし、開いたファイルがクラスを再度開いた場合(前後を確認しない限り)、それは役に立ちません。

メソッドのリストにプログラムでアクセスする必要がない場合は、riコマンドラインツールを使用して、クラス、モジュール、またはメソッドのドキュメントを確認することを検討してください。

0
rampion

私はこれをジョネルフの答えにコメントしたでしょうが、どうやら私には十分な担当者がいません。

some_object.methods.sort-Object.new.methods

これは、他の人が言っているようにあなたが求めていたものとは正確には異なりますが、あなたが求めている情報を提供します。

0
jshen

私があなたの質問を厳密に読んだ場合、私はそのように答えなければなりません:Rubyのrequireで指定されたファイルは単なるコンテナであり、必ずしもとの関係はありませんクラス。内容は次のとおりです。

  • クラス
  • モジュール
  • プレーンコード

または上記の任意の組み合わせ、数回。したがって、特定のファイル内のすべてのメソッドを直接要求することはできません。

特定のモジュールまたはクラスのすべてのメソッドを一覧表示する場合、他の答えはあなたが求めるものです(主にモジュール名またはクラスで#methodsメソッドを使用します)。

0
Keltia