ちょこちょことサンプルコードを書いていたら、 private なクラス メソッドが Ruby では外部から呼び出しができてしまいました。
こんなコード。
class Hoge
private
def self.hello
"Hello."
end
def huga
"Huga."
end
end
puts Hoge.hello
puts Hoge.new.huga
Hello. access.rb:13: private method `huga' called for #<Hoge:0xb7c74964> (NoMethodError)
よく分からなかったので、先日購入したプログラミング Ruby を見てみました。
private は明示的なレシーバを指定して呼び出せず、 レシーバは常に自分自身 (self) です。
レシーバとは . (ピリオド)の前の部分とのこと。
Java と C# で書いてきたので違和感を感じてしまうなあ。 たくさん書いてはやく違和感をなくしたいと思います。
[追記:] private_class_method :hello と指定することでクラスメソッドを private にすることができました。