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

self === other
  このメソッドは case 文での比較に用いられます。
  デフォルトは Object#== と同じ働きをしますが、この挙動はサブクラスで所属性のチェックを実現するため適宜再定義されます。

eql?(other)
  二つのオブジェクトが等しければ真を返します。Hash で二つのキーが等しいかどうかを判定するのに使われます。
  このメソッドを再定義した時には Object#hash メソッドも再定義しなければなりません。
  eql? のデフォルトの定義は equal? と同じくオブジェクトの同一性判定になっています。

equal?(other)
  other が self 自身の時、真を返します。
  このメソッドを再定義してはいけません。
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

複雑だよねー