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_methods
、instance_methods
等に適宜置き換えてください。
とりあえずアルファベット順にメソッド一覧をみてみる
hoge.methods.sort
めちゃくちゃいっぱいメソッドが出てくるがアルファベット順にソートしておくことで、こんなメソッドないかなーというのが探しやすくなります。
grepしてみる
例えばtarget
という文字を含むメソッドを探すには以下のようにします。
ここでは念のためi
オプションを付けて大文字小文字を無視しています。CamelCaseを使うRubyMotionでは必須です。
hoge.methods.grep /target/i
Object等の基底クラスで定義されているメソッドを取り除く
hoge.methods - Object.methods
Object
はActiveRecord::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が使えないので上の方法を組み合わせることで、メソッドをうまく探すと幸せになれるかもしれません。