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 メソッドを定義してみました.