1. ホーム
  2. ruby

[解決済み] nil:NilClass のための未定義のメソッド `+' (NoMethodError)

2022-02-05 09:47:04

質問

私は、整数である "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

解決方法は?

ローカル変数の参照は、同名のメソッド呼び出しより優先されます。

同様に、ローカル変数の代入は、同名のメソッド呼び出しより優先されます。という形式のライターメソッドは foo= は、明示的なレシーバが必要です。レシーバーが省略された場合、メソッドとして認識されず、ローカル変数の代入として認識される。

def add_cash(amount)
  self.cash = cash + amount
end