読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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

ruby

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