"<=>"メソッドを定義し、Comparbleモジュールを読み込むと、
"<", "<=", ">", ">="といったメソッドを追加することができます。
実際のところ
前のコードを改造して、以下のようにします。
require 'pp' class Rarity include(Comparable) attr_reader :rarity def initialize(rarity = :common) @rarity = rarity end def <=>(other) rarity_tbl = {damaged: 0, common: 1, uncommon: 2, rare: 3} rarity_tbl[rarity] <=> rarity_tbl[other.rarity] end end class Card attr_reader :rarity, :name def initialize(rarity = :common, name) @rarity = Rarity.new(rarity) @name = name end end ary = [] ary << Card.new(:rare, :firefox) ary << Card.new(:common, :ie) ary << Card.new(:rare, :chrome) ary << Card.new(:uncommon, :opera) ary << Card.new(:damaged, :unknown) print ":damaged > :common should be ture => #{ary[4].rarity > ary[1].rarity}\n"
通常のシンボルの比較なら、
:damaged > :common => true
となります。
実際に上記を実行すると
:damaged > :common should be ture => false
と出て、ちゃんと<=>メソッドで定義してあげた順に優先付けされている事が確認できます。