Ruby 2.7 アドベントカレンダーの8日目の記事です。
self でのプライベートメソッド呼び出し
プライベートメソッドは、obj.hoge
の形式で呼び出そうとしたら普通はエラーになるのですが、self.hoge
の場合はエラーにならなくなりました。
class A def foo self.hoge # 2.6 では private method `hoge' called for #<A:0x000055f92ca59738> (NoMethodError) end private def hoge end end A.new.foo
なお、次のように self
を一旦変数に代入してから使用した場合は今までと同じエラーになります。
obj = self obj.hoge #=> private method `hoge' called for #<A:0x000055c8c3ab7c78> (NoMethodError)
元々、=
で終わるメソッド呼び出しは self.hoge=
の形式でもエラーになってませんでした。
というより、self
をつけずに hoge=
と記述すると hoge
変数への代入になってしまって、hoge=
メソッドは呼ばれません。
class A def foo hoge = 123 # hoge 変数への代入 self.hoge = 123 # hoge= メソッドの呼び出し end private def hoge=(n) end def hoge end end A.new.foo
そのために self.hoge=
の形式で記述できるようになっていたのですが、self.hoge
がエラーになるのは非対称だということで、合わせることになったみたいです。