📌
【Ruby】メソッドの可視性
Rubyではそれぞれのメソッドに呼び出し制限を設定することができ、以下の種類があります。
public
どのインスタンスからでも実行できる。制限なし。
(デフォルトではpublic)
class Baz
def public_method1
p "パブリックメソッド"
end
end
Baz.new.public_method1
# 出力結果
=> "パブリックメソッド"
protected
自分自身、またはサブクラスのインスタンスから実行できる
クラスの外からは呼び出せない。同じインスタンス内で呼び出せる。
class Foo
def public_method1
protected_method
end
protected
def protected_method
p "プロテクトメソッド"
end
end
class Foo1 < Foo
end
Foo.new.public_method1
# 出力結果
=> "プロテクトメソッド"
Foo1.new.public_method1 #サブクラスからの呼び出せる
# 出力結果
=> "プロテクトメソッド"
f = Foo.new
f.protected_method
# 出力結果
=> # エラー。レシーバ付きでクラスの外からは呼べない。
private
クラスの外からは呼び出せない。同じインスタンス内でのみ、関数形式で呼び出せる。
レシーバを付けた呼び出しはできない
class Bar
def public_method1
private_method
end
def public_method2
self.private_method #レシーバを指定の実行不可
end
private
def private_method
p "プライベートメソッド"
end
end
Bar.new.public_method1
# 出力結果
=> "プライベートメソッド"
Bar.new.public_method2
# 出力結果
=> # エラー。レシーバを指定の実行不可
Discussion