privateなアクセサは例外的に「self.value = x」という形が許される

2008-06-12

self.methodのように書くのもだめ

ぢつは例外がひとつだけ。

class Hoge
  private
  attr_accessor :value # !> private attribute?
  def foo() :hoge end
  
  public
  def hoge
    self.foo rescue $!
# => #<NoMethodError: private method `foo' called for #<Hoge:0x83893f4>>
    self.value = 3
  end
end

hoge = Hoge.new
hoge.hoge   # => 3
hoge        # => #<Hoge:0x83893f4 @value=3>

メソッド名が「=」で終わるメソッド…つまりアクセサ…はprivateであっても「self.value = 〜」という形で呼び出せる。あまり知られてないかも。