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