クラスメソッドの定義
初歩的な事なのだけど、
改めてクラスメソッドの定義方法にいろんな書き方がある事を忘れていたのでメモ。
# 特異メソッド方式。 class Hoge def Hoge.foo end def self.foo2 end end
Rubyではクラスは定数であり、つまりオブジェクトである。
そのオブジェクトに対して、特異メソッドを定義している。
これがクラスメソッドになる。
# クラス定義の外でも良い def Hoge.bar end class Foo end foo = Foo.new def foo.bar end
オブジェクトに対する特異メソッド、という意味では
上記の2つは同じ事なのだ。
ふむふむ
# 特異クラス方式 class << Hoge def bar 'bar' end end class Hoge class << self def hoge 'hoge' end end end
特異クラスにメソッドを書いてもそれもまたクラスメソッド。
つまりクラスメソッドとは特異クラスのメソッドな分けか。
つまり、クラスメソッドと特異メソッドは同じ物なわけだ。
なるほど。
ちなみに、上記2つめの書き方は、
複数のクラスメソッドを書く場合に便利なようです。
class Hoge class << self def hoge; end def foo; end def bar; end end end