C++のノリで以下のように宣言しても、Rubyのクラスメソッドはprivateにはなりません。
1 class Foo 2 private 3 def self.bar 4 end 5 end 6 7 Foo.bar #=> 呼べる
Rubyでクラスメソッドをprivateにするためには、以下のように
private_cl
を利用します。
1 class Foo 2 def self.bar 3 end 4 5 private_class_method :bar 6 end 7 8 Foo.bar # => NoMethodEr ror: private method `bar' called for Foo:Class
private_cl
の宣言は、メソッド定義より後ろにある必要があります。
posted by
genki
on Mon 5 May 2008
at 04:44
with
2 comments
privateもクラスレベルで行わないとだめです class Hoge class << self private def hoge 1 end end end
ご指摘の通りです。
ということですね。
private_class_method
は、結果的には上記と同様のことをしてくれる感じになります。 Cレベルのソースは以下のような感じですね。既存のメソッドの可視性をprivateにしています。