読者です 読者をやめる 読者になる 読者になる

==メソッド

self==(other)
self と other が等しければ真を返します。 デフォルトでは equal? と同じ効果です。 このメソッドは各クラスの性質に合わせて再定義するべきです。

マニュアル的には==メソッドはオーバーライド推奨らしいです。

オブジェクトが同一の値かどうかを判定するメソッドが==で、オブジェクトそのものの同一性判定がequal?メソッド。利用の仕方がJavaと逆なのでJavaからRubyな人は注意。Javaでは==はメソッドじゃないけどな。

ついでに===とかeql?とか似たようなメソッドがたくさんあって分かりにくいので整理した。

equal?

オブジェクトの同一性判定(同じインスタンスかどうか?)を行う。オーバーライドすべきではない。

==

オブジェクトの同値関係を調べる。デフォルト動作はequal?と同じだが、オブジェクトが表現する値が同じならtrueとなるようにオーバーライドするといい。

eql?

Hashのキーの比較に使う。そのためeql?がtrueとなる2つのオブジェクトはhashメソッドの戻り値も同一であるべき。

デフォルトはequal?と同じ動作。でもハッシュのキーなんてのはインスタンスが同一である必要はあんまり無いので==をオーバーライドした上で、それを呼び出すようにすると大抵上手くいく。ていうかデフォルト==で良いような…?

===

case文での比較に使う。デフォルトは==と同じ動作。どういう場合にオーバーライドするのかよく分からん。