ブログ記事からの転載です。
Ruby 2.7 で private メソッドが self. 付きで呼び出せるようになる予定です。
- Feature #16123: Allow calling a private method with
self.- Ruby master - Ruby Issue Tracking System - Feature #11297: Allow private method of self to be called - Ruby master - Ruby Issue Tracking System
- [Feature #16123] calling private methods with
self.by nobu · Pull Request #2474 · ruby/ruby · GitHub
Ruby 2.6
class X
def hoge
# Error
# private method `value' called for #<X:0x0000561963d99e78 @value=42> (NoMethodError)
self.value
end
private
def value
42
end
end
Ruby 2.7
class X
def hoge
# OK
self.value
end
private
def value
42
end
end
もちろん self. 以外のレシーバで呼び出した場合は依然としてエラーになります。
class X
private
def value
42
end
end
# Error
# private method `value' called for #<X:0x0000561963d99e78 @value=42> (NoMethodError)
p X.new.value
個人的にはそこまで必須ではないんですが、変数名と同じ名前の private メソッドを呼びたい場合に便利かなあって感じですかねえ。
あとは self.value = 42 ってかけるのに self.value ってかけないのはなんか統一感がない気はしていたのでそういう意味ではいいんじゃないですかねー。