我刚读完POODR的前几章。作者展示了attr_reader(访问器)的一个特性,它允许您在声明它们之后在引用实例变量时消除对'@'的需要,此外还有更为人熟知的attr_特性。
但是,GuessingGame#解决了吗?代码只有在我使用'@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
答案 0 :(得分:4)
你的怀疑是正确的。
代码:
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