Moduleでextend self

なるほどなーと思ったのでメモ。

Moduleのクラスメソッドを作りたいとき、次のような方法もある。

module Foo
  extend self

  def some_method
    puts "Hello!"
  end
end

実行すると次のようになる。

irb> Foo.some_method
#=> Hello!

module_methodだと取りこぼしがあり得るのでこの方法なら安心。 もしプライベートメソッドを作りたければprivateを付ければいい(これは結構いい)。 関数的な処理をまとめるだけでSingletonパターンを使うほどではないっていうときにきっと便利。

聞きかじったことをメモしてるだけなのでクラスでincludeしたらどうなるのかは気になるところだけど、多分インスタンスメソッドとしてもsome_methodが使えるんだろうな。