Proc#=== の使い道

Proc オブジェクトの呼び出し方法はいくつかあります

proc = Proc.new{|i,j| i*j}
proc.call(2,3) #=> 6
proc.(2,3) #=> 6
proc[2,3] #=> 6
proc === [2,3] #=> 6

が,一番最後のはどこで使うんだろうと思っていたんですが,case when では === を用いて比較されるので,そこで使えると気づきました.

class Range
    def fizz_buzz(fizz,buzz)
        fizzbuzz = lambda{|i| fizz.(i) && buzz.(i) }
        self.each do |item|
            case item
            when fizzbuzz then puts "FizzBuzz"
            when fizz then puts "Fizz"
            when buzz then puts "Buzz"
            else puts item
            end
        end
    end
end

#
# main
#
if __FILE__ == $0 then

    (1..100).fizz_buzz( lambda{|i| i%3==0}, lambda{|i| i%5==0} )

end

こんな風に,case 文がかなりスッキリします.
Range に Fizz と Buzz を言う条件を自由に設定できる fizzbuzz メソッドを定義してみました.