07/05/17 06:07:24
>>353
初期化されてないも何も、クラスメソッドはそのクラスオブジェクトの特異メソッドであって、
インスタンスのメソッドじゃないよ。
つってもわからんか…。
Hoge.hoge()
の例で行くと、Hogeがクラスオブジェクト(Classクラスのインスタンス)なんですよ。
Hogeがオブジェクトなんです。Hogeはどのクラスに属しているかというと、
p Hoge.class #=> Class
ということになります。リファレンスマニュアルを開くとわかると思うけど、
Classというクラスが存在しています。で、HogeはそのClassクラスのインスタンスというわけです。
で、hogeは何かというと、オブジェクトHogeの特異メソッドというわけです。
Hogeというオブジェクトのメソッドだから Hoge.hoge() と呼ぶわけです。
実際にhoge()の中でp self.classと1行加えると「Class」と出力されるでしょう。
ここでメソッドaは何かというと、クラスHogeの(インスタンス)メソッドです。
なのでメソッドaを呼ぶにはHogeオブジェクトが必要になります。
ここで、メソッドaの中で p self.classと1行加えて、
たとえばHoge.new.aとやると「Hoge」と出るはずです。
というわけで、インスタンスメソッドとクラスメソッドは全く異なるクラスに属しているということになります。
なので呼べません。