クラス定義内では、setter=は、メソッド呼び出しではなくローカル変数への代入とみなされる

「プログラミング 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