privateなセッタメソッドはself.をつけて呼ばなければならない
Rubyのprivateなセッタメソッドについてメモ。
Rubyのprivateメソッドはレシーバを省略しないと呼べない仕様だけど、
末尾に「=」がつくセッタメソッドに限ってはself付きで呼ばないと動いてくれないようだ。
class Foo def foo bar=("bar=") # NG(ローカル変数代入扱いになる) self.bar=("self.bar=") # OK bar("bar") # OK self.bar("self.bar") # Error end private def bar(i) puts i end def bar=(i) puts i end end Foo.new.foo
self.bar= bar aaa.rb:7:in `foo': private method `bar' called for #<Foo:0x00007ff5e3930270> (NoMethodError) from aaa.rb:21:in `<main>'