Ruby增量(+ =)为nil:NilClass引发错误未定义方法'+'

Dav*_*d_R 6 ruby

以下代码导致我的问题:

class Foo
  def initialize(n=0)
    @n = n
  end

  attr_accessor :n

  def inc
    n+=1
  end
end
Run Code Online (Sandbox Code Playgroud)

呼叫Foo.new.inc加注NoMethodError: undefined method '+' for nil:NilClass 呼叫Foo.new.n返回0

为什么会Foo.new.inc引发错误?我Foo.new.n+=1没有问题.

use*_*740 13

tldr; self.n = x必须始终使用某种形式分配给setter.

考虑到n += x扩展到n = n + x其中n为绑定为一个局部变量,因为它出现在赋值的左侧.局部变量的这种"引入"抵消了对自身的隐式方法调用(例如n- > self.n)的正常回退行为.

因此,由于n尚未分配(但现在它被绑定为局部变量),表达式将计算 n = nil + x引发异常的原因.