せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【Ruby】モジュール関数の作成方法(module_functionの使い方)

 

プログラミング言語 Ruby

プログラミング言語 Ruby


内容が濃すぎてぜんぜん進まない。。。


 

モジュール関数とは

モジュールのプライベートメソッド。
Rubyではプライベートというのは、「見える範囲が小さい」の概念ではない。

モジュールのインスタンスメソッドをプライベート化することで、
レシーバ無しでメソッドを呼び出せる。
 →オブジェクトの状態を気にしない「関数」としてとらえることが出来る。

だから、モジュール関数の中でselfを使うことは避ける。
selfの値によって動作が変わることは「関数」の意に沿わないから。

 
module_functionメソッドにて、
 ・インスタンスメソッドのprivate化(関数化)
 ・publicクラスメソッドの作成
の両方が実行される
 

module Kokugo
  def greeting
    p "hello"
  end
  module_function(:greeting)
end

class Hoge
  include Kokugo
  def gre
    greeting  #<= privateインスタンスメソッドの実行

    #module_functionメソッドによりインスタンスメソッドはprivate化(関数化)されるためエラーとなる
    self.greeting  
  end
end
Kokugo.greeting  #<= publicクラスメソッドの実行
Hoge.new.gre

 

なるほど。