PerlerのRuby日記

Rubyとか

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>'