Ruby の private セッターメソッドは self. をつけても呼び出すことが出来る
さて、 Ruby の private メソッドは通常レシーバを付けて呼び出す事が出来ません。
class User private def age 42 end end user = User.new # NG : private method `age' called for #<User:0x0000562111c42218> (NoMethodError) p user.age
これは self.
を付けても同じです。
class User def output # OK p age # NG : private method `age' called for #<User:0x00005606cceabb80> (NoMethodError) p self.age end private def age 42 end end user = User.new user.output
セッターメソッドの場合は self.
を付けてもメソッドを呼び出すことが出来る
例外的に #age=
のようなセッターメソッドの場合は private メソッドでも self.
を付けて呼び出すことが出来ます。
class User def set # これだとローカル変数に対して代入される age = 42 # OK : private メソッドだけど self. を付けて呼び出せる self.age = 42 end private def age= value @age end end user = User.new user.set
代入式の場合、レシーバを付けないとローカル変数が定義されてしまうのでこれだけ例外的に呼び出す事が出来るようになっているんですかね。