【Ruby】private設定について(メモ)


※この記事は随時更新する予定

はじめに

なぜ「private」という設定が必要なのか疑問だったため調べてみた。

privateとは

概要は以下の通り。

アクセス修飾子の一つ。
クラスの外からは呼び出せない。同じインスタンス内でのみ、関数形式で呼び出せる。

呼び出せない例

class User
  def hello
    p "こんにちは"
  end

  private

  def night
    p "おやすみ"
  end
end

user = User.new
user.hello #"こんにちは"
user.night #エラー

privateメソッドであるnightメソッドを、クラスの外から呼び出そうとすることでエラーとなる。

一旦クラス内で呼び出したものをクラス外からで呼び出す

class User
  def hello
    p "こんにちは"
  end

  def night2
    night
  end

  private

  def night
    p "おやすみ"
  end
end

user = User.new
user.hello #"こんにちは"
user.night2 #"おやすみ"

呼び出そうと思えば可能

class User
  def hello
    p "こんにちは"
  end

  private

  def night
    p "おやすみ"
  end
end

user = User.new
user.hello #"こんにちは"
user.send(:night) #"おやすみ"

sendメソッドを使うことで、クラスの内側からメソッドを呼び出すのと同じように実行できる。

以上