「プログラミング Ruby 第2版」p142より
クラス定義内では、setter=は、メソッド呼び出しではなくローカル変数への代入とみなされる。メソッド呼び出しであることを示すには、self.setter=を使う。
class Incorrect
attr_accessor :one, :two
def initialize
one = 1 # 間違い。これではローカル変数への代入とみなされる
self.two = 2
end
end
obj = Incorrect.new
obj.one → nil
obj.two → 2