我正在尝试用 ruby 编写一个模块,每当我使用比较运算符时,都会出现上述错误。没有一个操作员工作。
if self.health >= opponent.health
[:attack, opponent]
else
[:rest]
end
如果我犯了某种错误,请告诉我。
谢谢!
我正在尝试用 ruby 编写一个模块,每当我使用比较运算符时,都会出现上述错误。没有一个操作员工作。
if self.health >= opponent.health
[:attack, opponent]
else
[:rest]
end
如果我犯了某种错误,请告诉我。
谢谢!
>=
只能与 Comparable 对象一起使用。您的错误消息表明self.health
是nil
. 您需要对 和 都有一个 Comparable 对象self.health
,opponent.health
并进一步在它们之间定义比较。
正如@sawa 所说,您进行比较的原因是引发异常,即self.health
未定义该nil
方法(尽管@user1252434 提到,解释并不完全正确。该方法可以在任何类中定义,有或没有模块)。根据您要比较的内容,使用默认值进行此类比较可能很容易。对于对象,您可以调用使用(空字符串)作为比较的默认值:
>=
Comparable
>=
Comparable
String
to_s
""
self.health.to_s >= opponent.health.to_s
#Compares "" >= "" if the attributes are nil
对于 Fixnum 对象(整数),您可以使用to_i
用作0
默认值:
self.health.to_i >= opponent.health.to_i
#Compares 0 >= 0 if the attributes are nil
对于 Float 对象,您可以使用to_f
to0.0
作为默认值:
self.health.to_f >= opponent.health.to_f
#Compares 0.0 >= 0.0 if the attributes are nil