Ruby 的に自然な FizzBuzz

まことに FizzBuzz の種は盡きまじ。
 

fizzbuzz = Enumerator.new {|y|
  (1..).each do |i|
    f = (i % 3).zero?
    b = (i % 5).zero?
    y << case
         when f && b then "FizzBuzz"
         when f      then "Fizz"
         when b      then "Buzz"
         else             i.to_s
         end
  end
}

puts fizzbuzz.take(40)

Enumerator と Endless Range は使いたいよね。場合分けは case ~ when。