【发布时间】: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 简而言之:它终于对我有用,没有奇怪的语法和无法解释的错误 - 我能想出的唯一解释是我在测试期间搞砸了一些事情
-
感谢所有尝试提供帮助的人。