せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【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))


なるほどね。