オブジェクトのインスタンス変数名とメソッド一覧の取得方法

タイトルの通りです。

オブジェクトのインスタンス変数名とメソッド一覧の取得方法を探っていきます。

まずはインスタンス変数名からです。

インスタンス変数名の取得方法

instance_variables

class Foo
  def initialize
    @foo = 1
    @bar = 2
  end
end

x = Foo.new
x.instance_variables
=> [:@foo, :@bar]

このメソッドはインスタンス変数を配列で返してくれます。

メソッド一覧の取得

メソッド名 取得できるメソッド
Object#methods オブジェクトの持つプライベートメソッド以外
Object#public_methods オブジェクトの持つパブリックメソッド
Object#private_methods オブジェクトの持つプライベートメソッド
Object#protected_methods オブジェクトの持つプロテクテッドメソッド
Object#singleton_methods オブジェクトの持つ特異メソッド
class Foo
  def foo; end

  private

  def bar; end

  protected

  def baz; end
end

class Bar < Foo
  def foo_b; end

  private

  def bar_f; end

  protected

  def baz_f; end
end

x = Foo.new
y = Bar.new
def x.foo; end

x.methods
=> [:foo,
 :baz,
 :to_yaml,
 :to_yaml_properties,
...

x.public_methods
=> [:foo,
 :to_yaml,
 :to_yaml_properties,
 :pry,

 x.private_methods
=> [:bar,
 :DelegateClass,
 :default_src_encoding,
 :sprintf,

x.protected_methods
=> [:baz]

y.methods
=> [:foo_f,
 :baz_f,
 :foo,
 :baz,

y.public_methods
=> [:foo_f,
 :foo,
 :to_yaml,
 :to_yaml_properties,

y.private_methods
=> [:bar_f,
 :bar,
 :DelegateClass,
 :default_src_encoding,

y.protected_methods
=> [:baz_f, :baz]

x.singleton_methods
=> [:foo]

ちなみに特異メソッドのみを呼び出すのは、methodsからでも呼び出せます。

その場合は、引数にfalseを渡せばいいです。

参考

instance method Object#methods (Ruby 2.3.0)

x.methods(false)
=> [:foo]

まとめ

メソッド呼び出し方法を知っておけば、デバック時に役立つ可能性が生まれます。

以上です。