gpt4 book ai didi

ruby - 访问器方法已定义但不起作用

转载 作者:数据小太阳 更新时间:2023-10-29 07:43:00 25 4
gpt4 key购买 nike

我有这个代码:

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 的一种奇怪行为。

最佳答案

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

关于ruby - 访问器方法已定义但不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53778362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com