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になる。