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
使用できます。0.0
self.health.to_f >= opponent.health.to_f
#Compares 0.0 >= 0.0 if the attributes are nil