読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

モジュール関数の定義方法いろいろ

Ruby

モジュール関数は「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を使うほうがいいなー。

  1. 関数書く
  2. インスタンス変数使ってないなー
  3. そうだ、モジュール関数にしよう!

というパターンが多いので、後から「self.」をつけて回るハメになってメンドウなんだよね。