Ruby 3.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Objectクラス > methods
methods(include_inherited = true) -> [Symbol][permalink][rdoc]そのオブジェクトに対して呼び出せるメソッド名の一覧を返します。このメソッドは public メソッドおよび protected メソッドの名前を返します。
ただし特別に、引数が偽の時は Object#singleton_methods(false) と同じになっています。
include_inherited:Object#singleton_methods(false) と同じになります。
class Parent
private; def private_parent() end
protected; def protected_parent() end
public; def public_parent() end
end
class Foo < Parent
private; def private_foo() end
protected; def protected_foo() end
public; def public_foo() end
end
obj = Foo.new
class <<obj
private; def private_singleton() end
protected; def protected_singleton() end
public; def public_singleton() end
end
# あるオブジェクトの応答できるメソッドの一覧を得る。
p obj.methods(false)
p obj.public_methods(false)
p obj.private_methods(false)
p obj.protected_methods(false)
# 実行結果
[:protected_singleton, :public_singleton]
[:public_singleton, :public_foo]
[:private_singleton, :private_foo]
[:protected_singleton, :protected_foo]
例2
# あるオブジェクトの応答できるメソッドの一覧を得る。
# 自身のクラスの親クラスのインスタンスメソッドも含めるために true を指定して
# いるが、Object のインスタンスメソッドは一覧から排除している。
p obj.methods(true) - Object.instance_methods(true)
p obj.public_methods(true) - Object.public_instance_methods(true)
p obj.private_methods(true) - Object.private_instance_methods(true)
p obj.protected_methods(true) - Object.protected_instance_methods(true)
# 実行結果
[:protected_singleton, :public_singleton, :protected_foo, :public_foo, :protected_parent, :public_parent]
[:public_singleton, :public_foo, :public_parent]
[:private_singleton, :private_foo, :private_parent]
[:protected_singleton, :protected_foo, :protected_parent]
メソッド名一覧を取得するメソッド同士の対比は次のとおりです。Object#methods 系はレシーバ自身が応答できるメソッド(特異メソッドを含む)を対象にするのに対し、Module#instance_methods 系はクラス・モジュールが持つインスタンスメソッド(特異メソッドは含まない)を対象にします。
| メソッド | 対象 | 含まれる可視性 | 特異メソッド |
|---|---|---|---|
| Object#methods | レシーバ | public, protected | 含む |
| Object#public_methods | レシーバ | public | 含む |
| Object#private_methods | レシーバ | private | 含む |
| Object#protected_methods | レシーバ | protected | 含む |
| Object#singleton_methods | レシーバ | public, protected | 特異メソッドのみ |
| Module#instance_methods | self のインスタンス | public, protected | 含まない |
| Module#public_instance_methods | self のインスタンス | public | 含まない |
| Module#private_instance_methods | self のインスタンス | private | 含まない |
| Module#protected_instance_methods | self のインスタンス | protected | 含まない |
継承したメソッドを含めるかどうかなどを引数で制御できますが、引数の意味はメソッドごとに異なります(Object#methods は引数が false のとき特異メソッドのみを返します)。詳細は各メソッドの説明を参照してください。
[SEE_ALSO] Module#instance_methods,Object#singleton_methods