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と