メソッド定義内でselfがどう変化するのか調べた

クラスメソッドの中ではselfがクラスを指すことを知らなかったので、 メソッド定義内でのselfについて調べてみた。

def内のselfについて

  • 通常のメソッド定義
class SampleClass
  self #=> SampleClass
  def instance_method
    self #=> SampleClassのインスタンス
  end
end
class SampleClass
  class << self
    self #=> SampleClassの特異クラス
    def eigen_method
      self #=> SampleClass
    end
  end
end
  • 特異メソッドの定義
class SampleClass
  def self.eigen_method
    self #=> SampleClass
  end

  sample_obj = self.new
  def sample_obj.eigen_method
    self #=> sample_obj
  end
end

上の例を見る限り、メソッド定義内でのselfについては、インスタンスメソッドの定義と特異メソッドの定義で分かれていて、

  • インスタンスメソッドの定義では、メソッド定義対象のクラスのインスタンスがメソッド定義内でのselfになる。
  • 特異メソッドの定義では、メソッド定義対象のオブジェクトがメソッド定義内でのselfになる。

ということなのだと思う。