【Ruby】privateメソッドが期待するレシーバーとは
Rubyのprivateは、
「レシーバなしで呼べる範囲に限定する」
という意味だとは、前にも調べたところ。
今回はもう少し詳しく、
レシーバとして何が期待されているのかを確認します。
class Hoge def method1 p "jj" end p self #<= Hoge #method1 #<= エラー(1)。コンテキストがHogeクラスオブジェクトのため private :method1 end class Dede < Hoge p self #<= Dede def method2 p self #<= #<Dede:0x2e96ec0> method1 end def self.method3 p self #<= Dede #method1 #<= エラー。コンテキストがDedeクラスオブジェクトのため end end Dede.new.method2 Dede.method3
■実行結果
Dede #<Dede:0x2e96ec0> "jj" Dede
なるほど。
プライベート指定したインスタンスメソッドは、
そのクラスか、そのクラスを継承したクラスの
インスタンスオブジェクトから呼び出せないのか。
だから、当該クラス内であってもコンテキストが
クラスオブジェクトであるところはエラーになる(エラー(1))
なるほどね。