Rubinusのコードを見てたら発見したのでメモ。
通常、<=>メソッドは比較に使うメソッドです。
これを異なるクラス間でつかった場合……nilを返します。
1 <=> "a" # >> nil 1 <=> (1..9) # >> nil
この特性を生かして
class Range include Enumerable #略 def cover?(value) # MRI uses <=> to compare, so must we. beg_compare = (@begin <=> value) return false unless beg_compare #略 end #略 end