rub*_*796 5 ruby methods syntax
假设我有课Player,我想要一个布尔方法来检查玩家是否受到攻击:
class Player
attr_accessor :name, :health, :attacked?
def initialize(name)
@name = name
@health = 100
@attacked? = false
end
end
Run Code Online (Sandbox Code Playgroud)
我收到语法错误:
SyntaxError: (irb):14: syntax error, unexpected '='
@attacked? = false
^
from /usr/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud)
删除问号attacked可解决问题,但我认为最好遵循惯例来处理attacked?我的代码.这不是什么大不了的事放弃了问号,但为什么zero?和nil?习惯时@variables?和def methods?=无效?
mat*_*att 12
请注意,如果您注释掉导致错误的行(@attacked? = false),您仍会收到与问号相关的错误:
NameError: invalid attribute name `attacked?'
Run Code Online (Sandbox Code Playgroud)
问题是它?不是变量名中的有效字符.第一个错误(SyntaxError您所看到的)是在解析时引起的并立即捕获.当Ruby尝试评估代码并且无法创建名称包含无效字符的实例变量时,会导致第二个错误.
问号是在年底的有效字符的方法名称虽然(实际上它可能有一个方法?在其名称中的任何地方,但你不能直接调用该方法).
实现你想要的东西的一种方法是这样的:
class Player
attr_accessor :name, :health, :attacked
alias :attacked? :attacked
def initialize(name)
@name = name
@health = 100
@attacked = false
end
end
Run Code Online (Sandbox Code Playgroud)
这attacked没有问号,但attacked?作为别名添加.