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が使えるんだろうな。