以下代码导致我的问题:
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引发异常的原因.
| 归档时间: |
|
| 查看次数: |
1881 次 |
| 最近记录: |