Ahm*_*mza 3 ruby attr-accessor
我有这个代码:
class A
attr_accessor :count
def initialize
@count = 0
end
def increase_count
count += 1
end
end
A.new.increase_count
Run Code Online (Sandbox Code Playgroud)
它抱怨说:
in `increase_count': undefined method `+' for nil:NilClass (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
如果我将increase_count定义更改为:
class A
def increase_count
@count += 1
end
end
Run Code Online (Sandbox Code Playgroud)
然后它不会抱怨.可能是我遗漏了一些东西,或者这只是Ruby的奇怪行为.
Ale*_*kin 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
Run Code Online (Sandbox Code Playgroud)
边注:
attr_accessor :count 只不过是一个语法糖:
def count
@count
end
def count=(value)
@count = value
end
Run Code Online (Sandbox Code Playgroud)