奇怪的错误数量的参数(1为0)错误?

时间:2014-03-27 13:48:13

标签: ruby-on-rails ruby

我遇到方法定义问题。我在我的"购买"模型:

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的新手,所以它可能很简单。

2 个答案:

答案 0 :(得分:13)

你有相当棘手的错误!这一行:

self.total_amount = self.total_amount +newamount

由Ruby解释为:

self.total_amount = self.total_amount(+newamount)

因此你得到了ArgumentError

Ruby lexer错误+newamount表示参数(即一元加上后跟newamount标识符),因为它知道total_amount是方法调用,而{{1}后面没有空格。将该行写为:

+

将解决问题。或者更好的是,使用self.total_amount = self.total_amount + newamount 简写为@backpackerhh建议。

答案 1 :(得分:6)

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

这会将新金额添加到total_amount属性的当前值。

您试图将newamount作为参数传递给self.total_amount属性。