Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Module | protected

概要

Module#protected(name) -> ()

詳細

メソッドを protected に設定します。
引数が与えられた時には引数によって指定されたメソッドを protected に 設定する。
引数なしのときは今後このクラスまたはモジュール定義内で新規に定義されるメソッドを protected にする。

サンプルコード
require 'english'

class Hoge
  %i{hoge hige hage}.each do |m|
    define_method m do
      puts m
    end
  end

  private :hage
  protected :hige
  public :hoge
end

h = Hoge.new
h.hoge

begin
  h.hige
rescue
  # protected method をクラス外から利用しようとしてエラー
  print "error! ", $ERROR_INFO, "\n"
end

class Hige < Hoge
  def higehige
    # 継承したクラス内から protected method を利用
    hige
    self.hige
  end
end

Hige.new.higehige

begin
  h.hage
rescue
  # private method をクラス外から利用しようとしてエラー
  print "error! ", $ERROR_INFO, "\n"
end

class Hage < Hoge
  def hagehage
    # 継承したクラス内から private method を利用
    hage
    # レシーバー付きでの呼び出しは不可
    # self.hage
  end
end

Hage.new.hagehage

出力

$ ruby protected.rb
hoge
error! protected method `hige' called for #<Hoge:0x0000060045e7b8>
hige
hige
error! private method `hage' called for #<Hoge:0x0000060045e7b8>
hage