【问题标题】:undefined method '+' for nil:NilClassnil:NilClass 的未定义方法“+”
【发布时间】:2013-03-09 18:37:48
【问题描述】:

这是我的课:

class Combatant < ActiveRecord::Base
  attr_accessible :resource_current

  def change_resource(amount)
    resource_current += amount
    if resource_current < 0
      resource_current = 0
    elsif resource_current > 100
      resource_current = 100
    end
  end
end

在我得到的 Combatant 类对象上执行 change_resource 时:

undefined method `+' for nil:NilClass

当然,resource_current 已经初始化,值为 6。

当我将方法更改为:

  def change_resource(amount)
    self.resource_current += amount
    if resource_current > 100
      resource_current = 100
    elsif resource_current < 0
      resource_current = 0
    end
  end

是这样的:

undefined method `<' for nil:NilClass

所以我添加了另一个“自我”:

  def change_resource(amount)
    self.resource_current += amount
    if resource_current > 100
      resource_current = 100
    elsif self.resource_current < 0
      resource_current = 0
    end
  end

该方法现在有效。 为什么?为什么我不需要另一个“自我”作为第一个条件(如果 resource_current > 100)? 为什么我需要“自我”?

【问题讨论】:

  • 因为没有它,您可能会声明一个本地 resource_current,而不是访问 Rails 从 DB 模式生成的方法。
  • 好吧,我想第一行代码resource_current += amount可以解释为局部变量的声明。但是为什么我需要在第二种情况下使用self?为什么我在第一个条件下不需要一个?
  • logn 简而言之:它终于对我有用,没有奇怪的语法和无法解释的错误 - 我能想出的唯一解释是我在测试期间搞砸了一些事情
  • 感谢所有尝试提供帮助的人。

标签: ruby-on-rails-3.2


【解决方案1】:

正如我已经在上面的 cmets 中写的: 它终于对我有用,没有奇怪的语法和无法解释的错误——我能想到的唯一解释是我在测试过程中搞砸了。

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多