gpt4 book ai didi

ruby - 在 ruby​​ 方法中使用问号

转载 作者:数据小太阳 更新时间:2023-10-29 07:10:09 25 4
gpt4 key购买 nike

假设我有类 Player 并且我想要一个 bool 方法来检查玩家是否受到攻击:

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方法?= 无效?

最佳答案

请注意,如果您注释掉导致错误的行 (@attacked? = false),您仍然会收到与问号相关的错误:

NameError: invalid attribute name `attacked?'

问题是 ? 不是变量名中的有效字符。第一个错误(您看到的 SyntaxError)是在解析时引起的,并立即被捕获。第二个错误是在 Ruby 尝试计算代码但无法创建名称包含无效字符的实例变量时引起的。

虽然问号 方法 名称末尾的有效字符(实际上可能有一个带有? 的方法其名称中的任何位置,但您不能直接调用此类方法)。

一种实现你想要的方法是这样的:

class Player
attr_accessor :name, :health, :attacked
alias :attacked? :attacked

def initialize(name)
@name = name
@health = 100
@attacked = false
end
end

这使得 attacked 没有问号,但添加了 attacked? 作为别名。

关于ruby - 在 ruby​​ 方法中使用问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14006019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com