0

Ruby でモジュールを作成しようとしていますが、比較演算子を使用するたびに上記のエラーが発生します。どのオペレーターも機能しません。

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

私が何らかの間違いをしている場合はお知らせください。

ありがとう!

4

2 に答える 2

1

>=Comparable オブジェクトでのみ使用できます。エラー メッセージは、それが であることを示していself.healthますnil。と の両方に Comparable オブジェクトが必要でありself.healthopponent.healthさらにそれらの間で比較を定義する必要があります。

于 2012-04-11T14:47:59.513 に答える
0

@sawaが言ったように、比較で例外が発生している理由はself.healthnilメソッド>=が定義されていないためです(ただし、@ 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使用できます。0.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 に答える