前田です。

Kazuhiro HIWADA <hiwada / kuee.kyoto-u.ac.jp> wrote:

>また話をずらしてしまいますが、ソートの仕方ってのは一種類ではもちろ
んな
>いわけで、僕も昔、
>
>reverse = proc{|a,b| b<=>a}
>[h,o,g,e].sort(reverse)
>
>とかやって、えーできないのーとかほざいてたことがあります。大概の場合

最近のRubyなら、

001: reverse = proc {|a, b| b <=> a}
#<Proc:0x80073b38>
002: [1, 2, 3, 4].sort(&reverse)
[4, 3, 2, 1]

なんてことができます。
&を付けて渡す事でイテレータにProcオブジェクトをイテレータブロック
として渡す事が出来るわけです。

>特異メソッドとか作って対処するんでいいんですが。あ、
>
>[h,o,g,e].sort(:some_comparison_method_name) 
>
>みたいなメソッドって簡単に作れるのかな。

同様に、

003: def reverse(a, b)
004:   b <=> a
005: end
nil
006: [1, 2, 3, 4].sort(&method(:reverse))
[4, 3, 2, 1]

のようにメソッドオブジェクトをイテレータブロックとして渡す事も
できます。