宇宙船演算子
Ruby には比較を行う <=> という演算子があります。sort メソッド等は内部でこの演算子を利用して値の比較を行っているので、自作クラスにこの演算子を定義してオブジェクトの大小関係を明らかにすることが出来るようにしておけば、配列に入れた自作クラスを sort するようなことができるわけですね。*1
例えば以下のように使うわけです。
この演算子は、スターウォーズに出てきた帝国軍の戦闘機にちなんで宇宙船演算子と呼ばれるわけですが、ここは日本のシューティングゲーマーとしてジムダ演算子と呼ぶことを提案してみたいと思いますがどうでしょう?*2
class Foo
def initialize(value)
@value = value
enddef <=>(param)
@value <=> param.value
end
attr_reader :value
endarray = [Foo.new(4),Foo.new(1),Foo.new(2),Foo.new(9),Foo.new(3)]
array.sort.each do |e|
puts e.value
end