クラスにどんなメソッドがあるのか、使いたいメソッドが定義されているか調べたいことありますよね。
今回はメソッドの一覧を確認し、その中から目的のメソッドを探してみたいと思います。
一覧を表示するクラスとしてFixnumを使ってみます。
すべてのメソッドの一覧を表示するにはmethods
メソッドが使えます
a = 1 a.class #=> Fixnum a.methods => [:%, :&, :*, :+, :-, :/, :<, :>, :^, ・・・続く
出力は配列なので、arrayのメソッドが使えます。このときのrubyのバージョンは2.3.0でした
a.methods.size #=> 224
メソッドの一覧から、特定のワードを含んだメソッドを探すにはArrayのgrepメソッドが使えます。
a.methods.grep /method/ #=> [:singleton_method_added, :private_methods, :define_singleton_method, :singleton_method, :method, :public_method, :methods, :protected_methods, :public_methods, :singleton_methods]
インスタンス.methodsで表示されるのはインスタンスメソッドだけです。クラスメソッドを表示する場合は、.classをつけます。
a.class.methods >=> [:yaml_tag, :allocate, :superclass, :subclasses, :json_creatable?, :class_attribute, :descendants, :superclass_delegating_accessor, :superclass_delegating_accessor_with_deprecation, :superclass_delegating_accessor_without_deprecation, ・・・続く
クラスメソッドの中から"method"を含むものを検索します。
a.class.methods.grep /method/ #=> [:instance_methods, :public_instance_methods, :protected_instance_methods, :private_instance_methods, :method_defined?, :private_method_defined?, :protected_method_defined?, :private_class_method, :public_method_defined?, ・・・続く
instance_methodsというのがありますね。a.methods
とa.class.instance_method
とは同じ結果になります。
methodsメソッドは持っているすべてのメソッドを表示します。すべてのメソッドには、継承しているクラス(Fixnumの場合はIntegerクラスが親クラスです)のメソッドも含みます。そこで、引数に"false"を渡すと、そのクラスでのみ定義されたメソッドの一覧を表示することが出来ます。
a.class.methods(false) #=> [] a.class.instance_methods(false) #=> [:%, :&, :*, :+, :-, :/, :<, ・・・続く a.class.instance_methods.size #=> 225 a.class.instance_methods(false).size #=> 38
以上。rubyでメソッドの一覧を確認してみました。