privateメソッドの役割

呼び出し制限をかける場合に、privateメソッドを使っていました。

しかし、曖昧なまま使っており、privateメソッド正しい役割を知りませんでした。

メソッドの役割

レシーバを省略する形でしか呼び出せない

具体例を出します

class Greet
  def hello
    puts 'hello'
  end

  def private_hello
    puts 'private hello'
  end

  def private
    private_hello
  end

  private :private_hello
end

greet = Greet.new
greet.hello          →hello
greet.private_hello  →private method `private_hello' called for #<Greet:0x007fb32c9a5da8> (NoMethodError)
greet.private        →private hello

メソッド内から呼び出すと、privateメソッドは呼び出しに成功しますね。

まとめ

具体例を見るとスッキリしました。

レシーバを省略する形でしか呼び出せないことを意識します。