Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

<=>メソッドはクラス比較にも使える

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