以下のような定義の仕方だとプラベートインスタンスメソッドのfuga
が定義されるため、クラスメソッドのhoge
からは呼べません。
class Hoge
def self.hoge
p "hogehoge"
fuga
end
private
def fuga
p "fugafuga"
end
end
Hoge.hoge
# => "hogehoge"
# => NameError: undefined local variable or method `fuga' for Hoge:Class
Hoge.fuga
# => NoMethodError: undefined method `fuga' for Hoge:Class
クラスメソッドからプライベートなメソッドを呼びたい場合、
プライベートなクラスメソッドを定義して、以下のようにクラスメソッドのfuga
を定義してからprivate_class_method
でfuga
をプライベートクラスメソッドにします。
class Hoge
def self.hoge
p "hogehoge"
fuga
end
def self.fuga()
p "fugafuga"
end
private_class_method :fuga
end
Hoge.hoge
# => "hogehoge"
# => "fugafuga"
Hoge.fuga
# => NoMethodError: private method `fuga' called for Hoge:Class