結論は、「比較演算子(<, ==, >)ではなく、<=>を再定義すべし」。
当初の疑問
>と<と==の整合性ってどうやって取るんだっけ?
答え
def <=>(other) ~~(javaでいうObject#compareTo)~~を再定義する。他の>, <, ==は触らない。
from: https://stackoverflow.com/a/13973761
def ==(other)の実装は、return True if self<=>other == 0 else Falseのようになっている。
(https://docs.ruby-lang.org/ja/latest/class/Comparable.html)
考察
なぜこんがらがったのかを考えてみた。Javaだと、
- 比較演算子(
==,<,>)の挙動を書き換えることはできない。 - equalsToとcompareToを書き換えても、これによって比較演算子(
==,<,>)の結果が変わることはない。(確かsortingの並び順は変わるはずだ)
一方rubyだと、
- 比較演算子(
==,<,>)の挙動を書き換えることはできる。 - また、
<=>を書き換えることによっても、比較演算子の挙動が変わる。