ルビにモジュールを書き込もうとしていて、比較演算子を使用するときは上記のエラーが出ます。いずれの演算子も動作しません。未定義メソッド `> = 'for nil:NilClass(NoMethodError)
if self.health >= opponent.health
[:attack, opponent]
else
[:rest]
end
私が何らかの間違いをしている場合は教えてください。
ありがとうございます!
ルビにモジュールを書き込もうとしていて、比較演算子を使用するときは上記のエラーが出ます。いずれの演算子も動作しません。未定義メソッド `> = 'for nil:NilClass(NoMethodError)
if self.health >= opponent.health
[:attack, opponent]
else
[:rest]
end
私が何らかの間違いをしている場合は教えてください。
ありがとうございます!
>=
は、Comparableオブジェクトでのみ使用できます。エラーメッセージは、self.health
がnil
であることを示しています。 とopponent.health
の両方に対応するComparableオブジェクトが必要です。さらに、その間に比較が定義されている必要があります。
'Comparable'は'> = ' - Enumerable'を実装していません。 http://ruby-doc.org/core-1.8.6/Comparable.html – thomthom
@thomthom私の間違いを訂正してくれてありがとう。それを私が直した。 – sawa
メソッド '> ='はどのクラスにも追加することができ、比較の際に使用されます。また、エラーテキストには、要求されたメソッドが含まれていないオブジェクトのクラス(この場合はNilClass)が含まれていますが、これは合理的に比較できないものです。 ;) – user1252434
@sawaが言ったように、あなたは例外を比較を高めている理由はself.health
がとしての@ user1252434で述べたものの法>=
は(定義されていないためnil
、ということである、Comparable
説明は全く正しくありません。方法>=
はモジュールComparable
の有無に関わらず、任意のクラスで定義することができます。比較対象に応じて、このタイプの比較にデフォルト値を使用するのは簡単かもしれません。 String
オブジェクトの場合、あなたは比較のためのデフォルトとして""
(空の文字列)を使用するto_s
を呼び出すことができます。
self.health.to_s >= opponent.health.to_s
#Compares "" >= "" if the attributes are nil
Fixnumかのオブジェクト(整数)の場合は、デフォルトとして0
使用するto_i
を使用することができます。
self.health.to_i >= opponent.health.to_i
#Compares 0 >= 0 if the attributes are nil
フロートオブジェクトに対して、デフォルトとして0.0
使用するto_f
を使用することができます。
self.health.to_f >= opponent.health.to_f
#Compares 0.0 >= 0.0 if the attributes are nil
本当に 'self.health'は' nil'ではないのですか?それはエラーメッセージが主張するものなので...(おそらくコードのどこかのタイプミスですか?) – user1252434