undefined方法`> ='代表nil:NilClass(NoMethodError)

时间:2012-04-11 14:44:54

标签: ruby

我正在尝试在ruby中编写模块,每当我使用比较运算符时,我都会收到上述错误。没有一个运营商工作。

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

>=只能与Comparable对象一起使用。您的错误消息表明self.healthnil。您需要为self.healthopponent.health创建一个Comparable对象,并进一步对它们进行比较。

答案 1 :(得分:0)

正如@sawa所说,你比较的原因是self.healthnil>=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}}