ホーム

「== nil」が使えない!?

解説

一部のオブジェクトに対して
obj == nil
を使用すると、"can't convert NilClass into xxx"というエラーを吐くことがあります。
例えば、RGSS 組み込みクラス[Color]の場合、
color = Color.new(255, 0, 0)
if color == nil
  p "色が無いよ!!"
else
  p color
end
こんなことをすると、2行目でエラーを吐きます。
[Color]以外では、[Rect][Tilemap][Tone]がこのエラーを吐きます。
これはバグではなく、== による比較が定義されていないために起こるエラーです。

回避方法はいくつかありますが、最も簡単なのは
class Color
  def ==(obj)
    return self.equal?(obj)
  end
end
こんな定義を追加する方法です。
これで、先程のスクリプトが正常に動作するようになります。
もちろん、
if color.equal?(nil)
  ……
こう書くこともできます。