インスタンスメソッドをprivateにするには、class定義の中にprivate領域を作って、その中で定義します。
class C
private
def func
"called"
end
end
# private method `func' called
# pp C.new.func
特異メソッドや定数については、この方法が使えなかったため、記事としてまとめておきます。
クラス特異メソッド
private_class_method
private_class_method
メソッドを使ってprivateにします。
class C
def self.get_const
"const"
end
private_class_method :get_const
end
# private method `get_const' called for C:Class
# pp C.get_const
特異クラスのインスタンスメソッド
特異クラス定義内でprivateメソッドとして定義します。
class C
class << self
private
def get_const
"const"
end
end
end
# undefined method `get_const' for C:Class
# pp C.get_const
単純にprivate領域に特異メソッドを書く方法は失敗します。
class C
private
def self.get_const
"const"
end
end
pp C.get_const # => "const"
定数
private_constant
メソッドを使ってprivateにします。
class C
Const = "const"
private_constant :Const
end
# private constant C::Constant referenced
# pp C::Const
単純にprivate領域で定数を書く方法は失敗します。
class C
private
Const = "const"
end
pp C::Const # => "const"