我有此代码:
class A
attr_accessor :count
def initialize
@count = 0
end
def increase_count
count += 1
end
end
A.new.increase_count
它抱怨:
in `increase_count': undefined method `+' for nil:NilClass (NoMethodError)
如果我将increase_count
的定义更改为:
class A
def increase_count
@count += 1
end
end
那么它不会抱怨。可能是我缺少了某些东西,或者仅仅是Ruby的怪异行为。
答案 0 :(得分:11)
A#count=
要求显式接收者作为所有foo=
方法。否则,将创建并提升局部变量count
,并使用尚未初始化的局部变量使count + 1
。
class A
attr_accessor :count
def initialize
@count = 0
end
def increase_count
# ⇓⇓⇓⇓⇓ THIS
self.count += 1
end
end
puts A.new.increase_count
#⇒ 1
边注:
attr_accessor :count
只是以下方面的语法糖:
def count
@count
end
def count=(value)
@count = value
end