クラスメソッドがよくわからなくなってきた。
こんなことをしてみた。
class Hoge attr_accessor:huga def self.get_huga return @huga end end
クラスメソッドからインスタンス変数を触るという神もおそれぬ暴挙をし、実行してみたところ、怒られることなく終了してしまった。
実際にアクセスしてみたら怒られるだろうと試してみた。
hoge1 = Hoge.new hoge1.huga = "huga1" p Hoge.get_huga
結果。
nil
怒られなかった。
なんかよくわからなくなってきたので、リファレンスマニュアルを読んでみると、
クラスの特異メソッドをクラスメソッドと呼びます。特異メソッドは オブジェクトの固有のメソッドだと説明したばかりですが、Rubyには、 メタクラスという概念があり、すべてのクラスは、同名のメタクラスと いうものを持っていて、これは、Classクラスのインスタンスになって います。ここにクラスメソッドが定義されます。
僕の理解力不足が原因だろう、ますますわからなくなった。
まぁ、nilが返ってくるのだからよしとして、とりあえずこの件は置いておこう。