rubyのクラス内でpublicとprivate複数使ったらどうなるか

version

  • Ruby 2.7.0

rubyのクラス内でpublicとprivate複数使ったらどうなるか

rubyではメソッドのスコープの指定にpublicとprivate、さらにはprotectedがある。
publicの説明にはこう書いてある。

引数なしのときは今後このクラスまたはモジュール定義内で新規に定義されるメソッドをどんな形式でも呼び出せるように(public)設定します。

privateの説明はこう書いてある。

引数なしのときは今後このクラスまたはモジュール定義内で新規に定義されるメソッドを関数形式でだけ呼び出せるように(private)設定します。

じゃあ、private読んだ後にpublic読んでprivate呼ぶと?
最後に呼ばれた物が適応されるということで正しいか?
実験してみた。

まず、次のクラスを用意する。

class User
  def default
    puts 'default'
  end

  private
  def private1
    puts 'private1'
  end

  public
  def public1
    puts 'public1'
  end

  private
  def private2
    puts 'private2'
  end

  public
  def public2
    puts 'public2'
  end
end

publicに挟まれたprivate、またはprivateに挟まれたpublicはどのようになるのか。
実行結果は次のようになった。

User.new.default
# => default
User.new.private1
# => private method `private1' called for #<User:0x00007fb87c8110a0> (NoMethodError)
User.new.public1
# => public1
User.new.private2
# => private method `private2' called for #<User:0x00007fbda5820f90> (NoMethodError)
User.new.public2
# => public2

まー、予想していた通りでしたね。

結論

  • public、privateは何回呼んでも良い。
  • publickからprivateの間のメソッドはpublic、privateからpublicの間のメソッドはprivateになる。
タイトルとURLをコピーしました