0

我正在尝试用 ruby​​ 编写一个模块,每当我使用比较运算符时,都会出现上述错误。没有一个操作员工作。

if self.health >= opponent.health
        [:attack, opponent]
    else
        [:rest]
    end

如果我犯了某种错误,请告诉我。

谢谢!

4

2 回答 2

1

>=只能与 Comparable 对象一起使用。您的错误消息表明self.healthnil. 您需要对 和 都有一个 Comparable 对象self.healthopponent.health并进一步在它们之间定义比较。

于 2012-04-11T14:47:59.513 回答
0

正如@sawa 所说,您进行比较的原因是引发异常,即self.health未定义该nil方法(尽管@user1252434 提到,解释并不完全正确。该方法可以在任何类中定义,有或没有模块)。根据您要比较的内容,使用默认值进行此类比较可能很容易。对于对象,您可以调用使用(空字符串)作为比较的默认值: >=Comparable>=ComparableStringto_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_fto0.0作为默认值:

self.health.to_f >= opponent.health.to_f
#Compares 0.0 >= 0.0 if the attributes are nil
于 2012-04-11T16:54:43.300 回答