private

クラス定義やモジュール定義の中で private メソッドを呼び出すと、それ以降に定義されるインスタンスメソッドはプライベートメソッドとなる。戻り値はクラスあるいはモジュール自身。

private メソッドに引数としてシンボルあるいは文字列を渡すと、その名前を持つメソッドを private メソッドにする。引数に渡すメソッド名は複数指定できる。

参考:

Ruby の private メソッドとは | Secret Garden (Instrumental)

Java や C# の常識が通用しない Ruby の private メソッド | give IT a try

private メソッドの本質とそれを理解するメリット – Qiita

Ruby の private と protected 。歴史と使い分け – Qiita

アクセス制御とは | Ruby 入門 (rubylife.jp)

可視性 (public・private・protected) あれこれ | マコトのおもちゃ箱

instance method Module#private (Ruby 2.6.0)

private (Module) | Ruby リファレンス (ref.xaio.jp)

private_class_method

指定したクラスメソッド (クラスの特異メソッド) の可視性をプライベートに変更する。

クラスメソッドがプライベートになるのは、private_class_method を呼び出したクラスにおいてのみ。親クラスのメソッドをサブクラスでプライベートにした場合にそのサブクラスでのみプライベートとなり、親クラスではパブリックのままである。

new をプライベートクラスメソッドにする。

class Book
  private_class_method :new
  def self.create
    new
  end
end

Book.create      # => #<Book:0x00001234xxxxabcd>
Book.new         # => NoMethodError: private method `new' called for Book:Class
Book.send(:new)  # => #<Book:0x00001234xxxxabef>

クラスメソッドからはレシーバーを指定する必要がないので直接呼び出せる。クラス外からはクラスをレシーバーとしては呼び出せず、send を使う必要がある。

参考:

Ruby で private なクラスメソッドを定義するには | esm アジャイル事業部 開発者ブログ

Ruby でプライベートクラスメソッドを定義する方法 | ウェブエンジニア珍道中

Ruby のクラスメソッドはインスタンスメソッドと同じように private にならない – Qiita

new を呼べないようにする方法 | Hello, Stupid World!

instance method Module#private_class_method (Ruby 2.6.0)

instance method Module#public_class_method (Ruby 2.6.0)

private_class_method (Module) | Ruby リファレンス (ref.xaio.jp)

mixin してもサブクラスから呼び出せない private メソッドを作る方法

参考:

Mixin モジュールに private メソッドを作る | ryym.log

private をオーバーライドして public にする方法

参考:

private なメソッドを public なメソッドで オーバーライド出来たり出来なかったり – Qiita

protected

参考:

Ruby の private と protected 。歴史と使い分け – Qiita

Ruby の protected method ってどんなときに使うの? | 酒と涙とRubyとRailsと

Ruby のアクセス制御について (protect と private) | おもしろ web サービス開発日記

instance method Module#protected (Ruby 2.6.0)

タグ:

コメントを残す

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