特異メソッドから直接インスタンスメソッドは呼び出せない

下記のような書き方をするとエラーになる。

class A
  def self.speak
    say_hello 
  end

  def say_hello
    puts "Hello"
  end
end

A.speak # undefined local variable or method というエラーが表示される。

self.speakメソッドの中で自分自身のクラスをnewすると呼び出すことができる。

class A
  def self.speak
    self.new.say_hello
  end

  def say_hello
    puts "Hello"
  end
end

A.speak # Helloと表示される。

エラーになる理由

インスタンスメソッドインスタンスからしか利用できないため。