<RubyLearn/>

クラスとオブジェクト

オブジェクトの比較

Ruby には == / eql? / equal? / <=> という異なる比較メソッドがあります。 それぞれが何を比較するのかを理解することが重要です。

比較メソッドの違い

==値が等しいか(意味的な等価性)。サブクラスでオーバーライドして定義する。
eql?== と同様だが Hash のキー比較に使われる。型も一致する必要がある。
equal?同一オブジェクトか(object_id が等しいか)。オーバーライドすべきでない。
<=>大小比較。-1/0/1 または nil を返す。Comparable で活用される。
Rubyエディタ

カスタムクラスでの == の実装

独自クラスでは == をオーバーライドして値ベースの等価性を定義します。 eql? と hash もセットで実装するのがベストプラクティスです。

Rubyエディタ