说我有Player
类,我想一个布尔值的方法来检查,如果玩家被攻击:在Ruby方法使用一个问号
class Player
attr_accessor :name, :health, :attacked?
def initialize(name)
@name = name
@health = 100
@attacked? = false
end
end
我得到一个语法错误:
SyntaxError: (irb):14: syntax error, unexpected '='
@attacked? = false
^
from /usr/bin/irb:12:in `<main>'
删除从attacked
问号解决了这个问题,但我认为这将更好地遵循约定,在我的代码attacked?
。这不是什么大不了的事放弃了问号,但为什么zero?
和nil?
公约时@variables?
和def methods?=
是无效的?
'@ attacked'是一个实例变量,而不是一个方法。 '@attacked = false'; ......“def攻击? @attacked;结束' –
我的猜测是你不能将问号作为变量名的一部分。这只适用于方法。另外,我不记得带有setter的单个问号方法。他们都是获得者。 –
这是一个很好的观点。他们都是获得者。用问号创建一个setter会创建“attacked?=”方法,这也是无效的语法。所以我的代码也会有一个无效的变量名和一个无效的方法名。 – rubyuser1357796