✲゚。.ヾ(⌒(ノ'ω')ノ☆.。

変色系男子の日常。

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)ガーン 誤解してた。レシーバで呼び出せるかどうかの違いだったのか!!

ということを今更知りました。ちゃんちゃん♪