gpt4 book ai didi

ruby - attr_reader、attr_accessor 功能未按预期工作

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:22 25 4
gpt4 key购买 nike

我刚看完POODR的前几章.作者展示了 attr_reader(accessor) 的一个特性,除了 attr_ 的广为人知的特性之外,它还允许您在声明实例变量后引用它们时消除对“@”的需要。

但是,猜猜游戏#解决了吗?该代码仅在我使用“@guess”引用最近的“猜测”时才有效,而不是像我期望的那样简单地“猜测”。我的倾向是我也有一个方法 #guess 并且 Ruby 认为我正在调用该方法?这是正确的吗?

如有任何澄清,我们将不胜感激。

class GuessingGame
attr_reader :answer
attr_accessor :guess

def initialize(answer)
answer.is_a?(Integer) ? (@answer = answer) : (raise ArgumentError.new "You must enter an Integer.")
end

def guess(guess)
@guess = guess
if guess > answer
:high
elsif guess < answer
:low
else
:correct
end
end

def solved?
@guess == answer
end
end

最佳答案

你的怀疑是正确的。

代码:

attr_accessor :guess

相当于:

def guess
@guess
end

def guess=(new_value)
@guess = new_value
end

也就是说,它创建了一个获取实例变量值的方法和另一个设置实例变量值的方法。

当您稍后重新定义方法guess时,它覆盖attr_accessor隐式定义的方法:

def guess
3
end

def guess
4
end

guess
#=> 4

关于ruby - attr_reader、attr_accessor 功能未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21979996/

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