Ruby メソッドのアクセス制限

public, private, protectedの3つがあり、通常のメソッドはデフォルトでpublicになり、initialize()メソッドは常にprivateになる。

publicとは普通にインスタンスメソッドとして使えるが、privateはレシーバを省略するようになるため外部から呼び出せない。protectedは同一クラスからならインスタンスメソッドとして使えるというもの。

class Message
public def hello
"Hello Mike"
end
end
msg = Message.new
p msg.hello

privateメソッドはこのようにエラーとなる

class Message
private
def hello
"Hello Mike"
end
end
msg = Message.new
p msg.hello
# NoMethodError

レシーバを省略して別のインスタンスメソッドから読み込む事はできる。共通するクラス内専用のメソッドがあればprivateにして定義するという使い方や、外部からアクセスさせたくないメソッドの作成ができる。

class Message
def hello_p
p hello
end
private
def hello
"Hello Mike"
end
end
msg = Message.new
msg.hello_p
# "Hello Mike"

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA