言語に限らずスクリプトを書いている時にあるオブジェクトに対してメソッドがあるかどうかの確認がしたくなる時がある。Ruby ではメソッドがあるかどうかの確認をするには respond_to? を使用する。
> "hogehoge".respond_to?(:gsub)
=> true
> "hogehoge".respond_to?(:gsu)
=> false
標準では public と protected なメソッドのみ調べるが、第二引数に true を指定すると private メソッドがあるかも調べてくれる。
一方でクラスにそのメソッドがあるかどうかを確認するには method_defined? を使用する。
> String.method_defined?(:gsub)
=> true
String.method_defined?(:respond_to)
=> false
こちらも public と protected なメソッドのみ調べられる。private メソッドがあるかどうかは private_method_defined? を利用できる。
また、あるオブジェクトやクラスにあるメソッドの一覧を表示するには methods もしくは instance_methods メソッドを利用すると配列で返ってくる。
> "hogehoge".methods
=> [:<=>, :==, :===, :eql?, :hash, :casecmp,(省略)]
* String.instance_methods
=> [:<=>, :==, :===, :eql?, :hash, :casecmp,(省略)]
配列で返ってくるので grep とか sort とかと組み合わせる事で絞り込む事もできる。
> "hogehoge".methods.grep /strip/
=> [:strip, :lstrip, :rstrip, :strip!, :lstrip!, :rstrip!]
よく忘れるのでメモしておこう。