Freelance Orgsin Official Site

ごゆっくりしていって下さい

【Ruby】モジュール(Module)のインクルード(Include)しないメソッドの呼び方

宣伝

色々と見ていて仮想通貨をやるならコインチェックがおすすめです.(送金用にも)

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

Moduleに存在するメソッドの分類

いきなり宣伝から入りましたが,あまり関係ないです.

Moduleに定義したメソッドを任意のクラスのメソッドからインクルードをせず呼び出す方法を書いておきます(使うタイミングはあまりないですが)

結論から書くとinstance_methodをBindすることでほとんどのメソッドを呼び出せます.

と言いながら,それ以外の呼び方もあるのでタイプ毎に分けました.

Moduleの直下にそのままメソッド定義

最もポピュラーのメソッド定義ではないでしょうか.

module A
  def hoge
    'hoge'
  end
end
区分け
  1. instance_method
  2. public_instance_method
# 1
A.instance_method(:hoge).bind('').call
# 2
A.public_instance_method(:hoge).bind('').call

self使う

シングルトンでpublicなメソッドを作り出す.やり方が二通りある.

module A
  def self.hogehoge
    'hogehoge'
  end
end

module A
  class << self
    def hogehoge
      'hogehoge'
    end
  end
end
区分け
  1. singleton_method
  2. public_method
# 1
A.singleton_method(:hogehoge).call
# 2
A.public_method(:hogehoge).call
A.hogehoge

module_function

privateなインスタンスメソッドも作り出す.

module A
  module_function

  def fuga
    'fuga'
  end
end
区分け
  1. private_instance_method
  2. singleton_method
  3. public_method
# 1
A.instance_method(:fuga).bind('').call
# 2
A.singleton_method(:fuga).call
# 3
A.public_method(:fuga).call
A.fuga

Moduleにインスタンスメソッド定義

module A
  extend self

  def piyo
    'piyo'
  end
end
区分け
  1. instance_method
  2. public_instance_method
  3. public_method
  4. singleton_method
# 1
A.instance_method(:piyo).bind('').call
# 2
A.public_instance_method(:piyo).bind('').call
# 3
A.piyo

Moduleにprivateメソッド定義

module A
  private
  def foo
    'foo'
  end
end
区分け
  • private_instance_method
A.instance_method(:foo).bind('').call

Moduleにprivate特異メソッド定義

module A
  module_function

  def bar
    'bar'
  end
  private_class_method :bar
end
区分け
  • private_instance_method
  • private_method
A.instance_method(:bar).bind('').call

最後に

ミスっているところがあるかもしれません.その時は教えていただけると助かります.すぐに修正します.