未定义的方法“+”为 nil:NilClass (NoMethodError)

use*_*094 1 ruby

我正在编写一个简单的类,该类使用一个名为“cash”的变量进行初始化,该变量是一个整数。

下面是代码。当我运行这个时,我得到了 NoMethodError。我知道我可以通过使用@cash 引用本地类变量来轻松解决此问题,但是我在 OOP 上阅读的一本书建议几乎从不使用 @,而是设置 attr 并仅使用“cash”。我已经设置了 attr_accessor,但它不起作用,我想了解原因。谢谢

class Person
  attr_accessor :cash

  def initialize(cash)
    @cash = cash
  end

  def add_cash(amount)
    cash = cash + amount
  end
end
Run Code Online (Sandbox Code Playgroud)

saw*_*awa 7

局部变量引用优先于同名方法调用。

同样,局部变量赋值优先于同名方法调用。这种形式的 writer 方法foo=需要一个显式接收器。当接收者被省略时,它不被识别为一个方法,而是一个局部变量赋值。

def add_cash(amount)
  self.cash = cash + amount
end
Run Code Online (Sandbox Code Playgroud)