塩焼きブログ

塩焼きに関しての研究内容を公開しています

Ruby メソッドのアクセス制限

public, private, protectedの3つがあり、通常のメソッドはデフォルトでpublicになり、initialize()メソッドは常にprivateになる。

publicとは普通にインスタンスメソッドとして使えるが、privateはレシーバを省略するようになるため外部から呼び出せない。protectedは同一クラスからならインスタンスメソッドとして使えるというもの。

class Message

  public def hello
    "Hello Mike"
  end

end

msg = Message.new
p msg.hello

privateメソッドはこのようにエラーとなる

class Message

  private
    def hello
      "Hello Mike"
    end

end

msg = Message.new
p msg.hello
# NoMethodError

レシーバを省略して別のインスタンスメソッドから読み込む事はできる。共通するクラス内専用のメソッドがあればprivateにして定義するという使い方や、外部からアクセスさせたくないメソッドの作成ができる。

class Message

  def hello_p
    p hello
  end

  private
    def hello
      "Hello Mike"
    end

end

msg = Message.new
msg.hello_p
# "Hello Mike"