LoginSignup
34
33

More than 5 years have passed since last update.

Ruby(Motion)でmethodsを使ってメソッド検索

Last updated at Posted at 2013-06-03

Rubyはirbでmethodsメソッドを使うことで、それぞれのオブジェクトに定義されているメソッドをインタラクティブに検索できて便利ですよね。

メソッド検索用メソッド一覧

methodsという単語を含むメソッドは以下の通りです。

#instance_methods (Module)
#methods (Object)
#private_instance_methods (Module)
#private_methods (Object)
#protected_instance_methods (Module)
#protected_methods (Object)
#public_instance_methods (Module)
#public_methods (Object)
#singleton_methods (Object)

private, public等のスコープやインスタンスメソッドや特異メソッドのみ取り出すものがあるようですね。

ちなみに変数を検索するのもあります。(variablesで検索)

#class_variables (Module)
#global_variables (Kernel)
#instance_variables (Object)
#local_variables (Kernel)
#thread_variables (Thread)

constantsはクラスメソッドとインスタンスメソッドだけ。

::constants (Module)
#constants (Module)

以下の例では基本的にmethodsを使いますが、目的に応じてpublic_methodsinstance_methods等に適宜置き換えてください。

とりあえずアルファベット順にメソッド一覧をみてみる

hoge.methods.sort

めちゃくちゃいっぱいメソッドが出てくるがアルファベット順にソートしておくことで、こんなメソッドないかなーというのが探しやすくなります。

grepしてみる

例えばtargetという文字を含むメソッドを探すには以下のようにします。
ここでは念のためiオプションを付けて大文字小文字を無視しています。CamelCaseを使うRubyMotionでは必須です。

hoge.methods.grep /target/i

Object等の基底クラスで定義されているメソッドを取り除く

hoge.methods - Object.methods

ObjectActiveRecord::Base等、場合に応じて適当に変えてみて下さい。

ちなみにinstance_methodsの検索だったら、

hoge.instance_methods - Module.instance_methods

スーパークラスに定義されているメソッドを取り除く

hoge.methods - hoge.class.superclass.instance_methods
hoge.class.methods - hoge.class.superclass.methods

instance_methodsだったら、第二引数がinclude_superなので実は普通にできます。

hoge.instance_methods(false)

ちなみに:pryが使える場合

pryのlsを使えばやりたいことは多分解決します。

[1] pry(main)> ls hoge

RubyMotionではpryが使えないので上の方法を組み合わせることで、メソッドをうまく探すと幸せになれるかもしれません。

34
33
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
33