【Ruby】メソッドの呼び出し制限

ABOUTこの記事をかいた人

気になること&知らないことをひたすらググることを得意としています。このブログでは最近気になったことを中心に記事を書いていきます。記事には間違った情報を書かないように細心の注意を払っていますが、もし誤りがあった場合はコメントやお問い合わせフォームからご指摘いただければ幸いです。

今回は定義したメソッドへのアクセス権について説明していきます。Rubyでは下記の3種類の呼び出し制限を設定できます。

  • public
  • private
  • protected

public

publicはクラス定義の外からでもインスタンスメソッドとして普通に呼び出すことができます。メソッドを定義した際、通常ではこの設定がデフォルトとなっています。記述方法は下のような感じです。

「newメソッド」の際に自動的に呼び出される「initializeメソッド」では常に「private」と定義されています。「initializeメソッド」はアクセス権を「public」に定義し直すことはできません。

また、さっき言ったとおりデフォルトで通常はpublicとなっているのでわざわざ定義しなくても大丈夫です。

private

privateで呼び出し制限されたメソッドは、レシーバを指定してから呼び出すことができなくなるので、クラスの外側から呼び出すことはできません。

C:\Users>limit.rb
C:/Users/limit.rb:40:in <main>': private method priv' called for #<Limit:0x000000008cf848> (NoMethodError)

具体的にはこのようなエラーが表示されます。

「private」でアクセス権を定義されたメソッドはクラスの中からレシーバを指定せずに呼び出せば実行可能なので下記のように記述すれば他のインスタンスメソッドからは呼び出すことができます。例として「pub」という「priv」メソッドの呼び出しのみを行うメソッドを定義してみます。

privメソッド

9行目の「priv」は意味合い的には「self.priv」となりますが、「private」でアクセス権を定義されたメソッドはレシーバを指定して呼び出すことができないためこう書いてしまうとエラーが発生します。

publicやprivateを複数まとめて設定する方法

publicやprivateの設定を複数まとめて行うこともできます。メソッドを示すシンボルを複数記述をせずとも下記のように記述すればOKです。

コメントを残す

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

ABOUTこの記事をかいた人

気になること&知らないことをひたすらググることを得意としています。このブログでは最近気になったことを中心に記事を書いていきます。記事には間違った情報を書かないように細心の注意を払っていますが、もし誤りがあった場合はコメントやお問い合わせフォームからご指摘いただければ幸いです。