[Ruby]いつ特異メソッドを使うか

クラスAにメソッドBを定義するとき、それ以外のメソッドがクラスCのメソッドに委譲している場合、クラスAは中身がなくクラスCをそのまま使える

そういうときに特定のオブジェクトにメソッドを追加する(これが特異メソッド)

str = 'hoge'

# 特異メソッド
def str.hoge?
  self == 'hoge'
end

# この後にインスタンスを作り直すとメソッドが定義されていない状態に戻るのでNoMethodErrorが発生する
str = 'fuga'
str.hoge?
# => undefined method `hoge?' for "fuga":String (NoMethodError)

こうすればクラスにメソッドBを定義する必要がなくなる

クラスメソッドはクラスの特異メソッド

ほとんどのクラスはClassクラスのオブジェクト

なので、クラスメソッドもClassクラスのオブジェクト=特異メソッドであると言える