クラスメソッドをprivateメソッドにする方法
単純にprivate
にするだけはダメです。
class Foo def self.bar puts 'bar' end private def self.baz puts 'baz' end end Foo.baz =>baz
という風に実は普通に呼べています。
方法は二種類あります。
- self内でprivateを呼ぶ
- private_class_methodを定義する
self内privateを呼ぶ
class Foo def self.bar puts 'bar' end class << self private def baz puts 'baz' end end end Foo.baz NoMethodError: private method `baz' called for Foo:Class Did you mean? bar
きちんとprivate化されていますね。
private_class_methodを定義する
class Foo def self.bar puts 'bar' end def self.baz puts 'baz' end private_class_method :baz end Foo.baz NoMethodError: private method `baz' called for Foo:Class Did you mean? bar
同じ結果になっています。 ただし、後者はメソッドが定義された後に書かないといけなません。
そこは注意が必要ですね。
以上です。