前田です。 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] のようにメソッドオブジェクトをイテレータブロックとして渡す事も できます。