2014-03-27 201 views
4

我遇到了方法定義的問題。我有這樣的代碼在我的 「買」 的模式:奇怪錯誤的參數數量(1代表0)錯誤?

def update_amount newamount 
    self.total_amount = self.total_amount +newamount 
end 

,並在其他地方這個代碼:

buy.update_amount(amount) 

如果我運行該程序,我得到這個錯誤:

ArgumentError (wrong number of arguments (1 for 0)): 
    app/models/buy.rb:18:in `update_amount' 

現在,如果我改變這個(只是試試):

buy.update_amount 

我得到這個錯誤:

ArgumentError (wrong number of arguments (0 for 1)): 
     app/models/buy.rb:18:in `update_amount' 

我是新的Ruby on Rails,所以它可能是一件容易的事。

回答

6
def update_amount(newamount) 
    self.total_amount += newamount 
end 

這將新值添加到當前值total_amount屬性。

您試圖將newamount作爲參數傳遞給您的self.total_amount屬性。

+1

謝謝!有效!我會在10分鐘內給你正確的答案 – DemianArdus

+1

這很奇怪。我沒有看到與原始代碼和此代碼的任何區別。它沒有解釋OP正在得到的錯誤。 – jvnill

+0

是的。看看toro2k的答案。它解釋了OP爲什麼會得到「錯誤的參數數量(1代表0)」錯誤。在其他編程語言中,操作符之間沒有空格是好的,所以原始代碼與您的答案相同。它恰好發生了,ruby將'total_amount'解釋爲一種方法。 – jvnill

13

非常棘手的錯誤,你有!行:

self.total_amount = self.total_amount +newamount 

是由紅寶石解釋爲:

self.total_amount = self.total_amount(+newamount) 

因此,你得到的ArgumentError

紅寶石詞法分析器錯誤+newamount對於參數(即,一元加號接着newamount標識符),因爲它知道total_amount是一個方法調用,並且不後跟一個空格的+。將該行寫爲:

self.total_amount = self.total_amount + newamount 

將解決問題。或者更好的是,使用@backpackerhh建議的+=速記。

相關問題