Rubyのprivateメソッドはselfレシーバを指定して呼び出せない
これだめ!
class Foo def aaa self.bbb end private def bbb puts "bbb" end end Foo.new.aaa # => エラーだよ。
privateメソッドはselfレシーバを省略して呼び出す。
class Foo def aaa bbb end private def bbb puts "bbb" end end Foo.new.aaa # => "bbb"
でもこれって、代入の際にselfレシーバを省略すると、ローカル変数として扱われるって規約とぶつかるんじゃないの?
kelkronsoさんが取り上げてた⇒http://d.hatena.ne.jp/kelkronso/20080806/1218033736
↓これだと、cccがローカル変数として扱われる。
class Foo attr_reader :ccc def aaa ccc = "ccc" end private def ccc=(c) @ccc = c end end f = Foo.new f.aaa puts f.ccc # => nil
そもそも代入メソッドがprivateなんてキモいことはないような気がするけど、これじゃ呼べないじゃん。
一応selfをつけてエラーになることを確認する。
class Foo attr_reader :ccc def aaa self.ccc = "ccc" end private def ccc=(c) @ccc = c end end f = Foo.new f.aaa puts f.ccc # => "ccc"
!?こいつ呼べるぞ!ってことでprivateなメソッドでも代入メソッドは例外みたいです。