respond_to?とself_respond_to?の違い
respond_to?
respond_to?メソッドはレシーバが使用可能なメソッドを調べるメソッドです。
obj.respond_to?(name, private = false)
class Respond def hello puts "hello" end end > Respond.new.respond_to?(:hello) true > Respond.new.respond_to?(:goodmorning) false
self_respond_to?
これはActiveRecord::ActsAsで宣言されているメソッドです。
ActiveRecord::ActsAsはActiveRecordを拡張してMTIを実装しています。
レポジトリは以下です。respond_to?は96行目〜にあります。
def respond_to?(name, include_private = false, as_original_class = false) as_original_class ? super(name, include_private) : super(name, include_private) || acting_as.respond_to?(name) end def self_respond_to?(name, include_private = false) respond_to? name, include_private, true end
respond_to?を拡張してself_respond_to?を作っています。
自作クラスでrespond_to?を使う場合とRuby標準のrespond_to?を使う場合とで使い分けたかっただけのようです。
結論
respond_to?とself_respond_to?に大きな違いはありません。
ActiveRecord::ActsAsを使わない限りself_respond_to?を意識することはないように思われます。