webエンジニアの日常

RubyやPython, JSなど、IT関連の記事を書いています

Rubyでメソッドの一覧を確認する

クラスにどんなメソッドがあるのか、使いたいメソッドが定義されているか調べたいことありますよね。

今回はメソッドの一覧を確認し、その中から目的のメソッドを探してみたいと思います。

一覧を表示するクラスとしてFixnumを使ってみます。

すべてのメソッドの一覧を表示するにはmethodsメソッドが使えます

a = 1
a.class #=> Fixnum
a.methods
=> [:%,
 :&,
 :*,
 :+,
 :-,
 :/,
 :<,
 :>,
 :^,
   ・・・続く

出力は配列なので、arrayのメソッドが使えます。このときのrubyのバージョンは2.3.0でした

a.methods.size #=> 224

メソッドの一覧から、特定のワードを含んだメソッドを探すにはArrayのgrepメソッドが使えます。

a.methods.grep /method/
#=> [:singleton_method_added, :private_methods, :define_singleton_method, :singleton_method, :method, :public_method, :methods, :protected_methods, :public_methods, :singleton_methods]

インスタンス.methodsで表示されるのはインスタンスメソッドだけです。クラスメソッドを表示する場合は、.classをつけます。

a.class.methods
>=> [:yaml_tag,
 :allocate,
 :superclass,
 :subclasses,
 :json_creatable?,
 :class_attribute,
 :descendants,
 :superclass_delegating_accessor,
 :superclass_delegating_accessor_with_deprecation,
 :superclass_delegating_accessor_without_deprecation,
   ・・・続く

クラスメソッドの中から"method"を含むものを検索します。

a.class.methods.grep /method/
#=> [:instance_methods,
 :public_instance_methods,
 :protected_instance_methods,
 :private_instance_methods,
 :method_defined?,
 :private_method_defined?,
 :protected_method_defined?,
 :private_class_method,
 :public_method_defined?,
   ・・・続く

instance_methodsというのがありますね。a.methodsa.class.instance_methodとは同じ結果になります。

methodsメソッドは持っているすべてのメソッドを表示します。すべてのメソッドには、継承しているクラス(Fixnumの場合はIntegerクラスが親クラスです)のメソッドも含みます。そこで、引数に"false"を渡すと、そのクラスでのみ定義されたメソッドの一覧を表示することが出来ます。

a.class.methods(false)
#=> []

a.class.instance_methods(false)
#=> [:%,
 :&,
 :*,
 :+,
 :-,
 :/,
 :<,
  ・・・続く

a.class.instance_methods.size #=> 225
a.class.instance_methods(false).size #=> 38

以上。rubyでメソッドの一覧を確認してみました。