オブジェクトのインスタンス変数名とメソッド一覧の取得方法
タイトルの通りです。
オブジェクトのインスタンス変数名とメソッド一覧の取得方法を探っていきます。
まずはインスタンス変数名からです。
インスタンス変数名の取得方法
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]
まとめ
メソッド呼び出し方法を知っておけば、デバック時に役立つ可能性が生まれます。
以上です。