モジュール関数の定義方法いろいろ
モジュール関数は「def <モジュール名>.<関数名> ... end」の形式で定義する以外に、「Module#module_function」を使って作成することも可能です。
- 「Module#module_function」はModuleのprivate関数です。
- 引数つきで実行した場合、指定した関数(シンボルで指定)がモジュール関数になります。
- 引数なしで呼び出した場合、それ以降に定義された関数がモジュール関数になります。
- 「private」みたいな感じで使えるわけです。
module Test # 「self.」をつける def self.foo puts "foo" end # module_functionを引数つきで使う。 # 引数で指定した関数がモジュール関数になる。 def hoge puts "hoge" end module_function :hoge # module_functionを引数なしで使う。 # これ以降に定義された関数がモジュール関数になる。 module_function def var puts "var" end end Test.foo Test.hoge Test.var
実行結果です。
foo hoge var
ずっと「self.」をつける方式を使っていたけど、module_functionを使うほうがいいなー。
- 関数書く
- インスタンス変数使ってないなー
- そうだ、モジュール関数にしよう!
というパターンが多いので、後から「self.」をつけて回るハメになってメンドウなんだよね。