Ruby の private と protected
ある時ふと疑問に思った。クラスを書くときによく使う attr_accessor とか include ってそもそも何もの?
メソッドなんだろうけど、どこで定義されてるのかなとか。
調べてみたら、
クラス・モジュール定義の中のように、self が Class/Module オブジェクトである場所では、 Class/Module クラスの private メソッドを呼び出せます。 attr_accessor や include は Module クラスの private メソッドです。
ふむ。そして Class クラスは Module のサブクラスだから、どんなクラスでも使えるわけね? って、そこでまた疑問に思ったんだ。
なんで protected でもなく private なのにサブクラスでも呼び出せるの? (Java じゃ無理だろ的な意味で)
そこで Ruby の private や protected について調べてみた。
privateの意味は、メソッドを関数形式でだけ呼び出せるようにし、レシーバー形式では呼び出せないようにするという意味です。したがって、可視性がprivateなメソッドは、自クラス及びサブクラスからしか参照できません。 protectedも同様に、自クラス及びサブクラスからしか参照できませんが、関数形式でもレシーバー形式でも呼び出せます。 メソッドのカプセル化に必要な機能です。
Σ(゚д゚lll)ガーン 誤解してた。レシーバで呼び出せるかどうかの違いだったのか!!
ということを今更知りました。ちゃんちゃん♪