Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | ライブラリ | Comparable

パンくず

Ruby
ライブラリ
Comparable

概要

Rubyの組み込みライブラリのComparableモジュールについて

Comparableモジュール概要

比較演算を許すクラスのための Mix-in。
このモジュールをインクルードするクラスは、
基本的な比較演算子である <=> 演算子を定義している必要がある。

self <=> other は

self が other より大きいなら正の整数
self と other が等しいなら 0
self が other より小さいなら負の整数
self と other が比較できない場合は nil

をそれぞれ返すことが期待されている。

Comparableの各メソッドのサンプル

# encoding: Windows-31J

class LargeMediumSmall
  include Comparable # =>ComparableをMix-in
  attr_accessor:largeness
  
  SMALL = 1
  MIDIUM = 2
  LARGE = 3
  
  def initialize(largeness)
    @largeness = largeness
  end
  
  # Comparable用に<=>を実装
  def <=>(other)
    case other.largeness
    when SMALL,MIDIUM,LARGE then
      return self.largeness <=> other.largeness
    else
      return nil
    end
  end
end

large = LargeMediumSmall.new(LargeMediumSmall::LARGE)
midium = LargeMediumSmall.new(LargeMediumSmall::MIDIUM)
small = LargeMediumSmall.new(LargeMediumSmall::SMALL)

puts large < midium    # =>比較演算子 large < midium = false
puts large > midium    # =>比較演算子 large > midium = true
puts large <= midium   # =>比較演算子 large <= midium = false
puts large >= midium   # =>比較演算子 large >= midium = true
puts large == midium   # =>比較演算子 large == midium = false
puts midium.between?(small,large) # =>範囲 midiumはsmallとlargeの範囲に入るか = true
puts large.between?(small,midium) # =>範囲 largeはsmallとmidiumの範囲に入るか = false
puts midium.between?(small,midium) # =>範囲 midiumはsmallとmidiumの範囲に入るか = true

出力

false
true
false
true
false
true
false
true