特異クラスと特異メソッド

2011-07-20#ruby

以下の3つのコードはすべて同じことをしている。

naoty = Person.new('naoty') # naotyはPersonクラスのインスタンス
def naoty.greet # naotyというインスタンスに特異メソッドを定義
  p 'Hello, my world!'
end

class Person # PersonはClassクラスのインスタンス
  # ...
end
def Person.greet # PersonというClassクラスのインスタンスに特異メソッド(=クラスメソッド)を定義
  p 'Hello, world!'
end
naoty = Person.new('naoty') # naotyはPersonクラスのインスタンス
class << naoty # naotyというインスタンスの特異クラスをオープン
  def greet # 特異クラス内で定義されたメソッドはもちろん特異メソッド
    p 'Hello, my world!'
  end
end

class Person # PersonはClassクラスのインスタンス
  # ...
end
class << Person # PersonというClassクラスのインスタンスの特異クラスをオープン
  def greet # 特異クラス内で定義されたメソッドはもちろん特異メソッド(=クラスメソッド)
    p 'Hello, world!'
  end
end
class Person
  # ...

  class << self # PersonというClassクラスのインスタンスの特異クラスをオープン
    def greet # 特異クラス内で定義されたメソッドはもちろん特異メソッド(=クラスメソッド)
      p 'Hello, world!'
    end
  end
end