module FizzBuzzQuiz
def concat(str); ''.instance_exec(self){ |n| @n = n; self }.concat(str) end
def modulo(m); @n % m end
def fizz; modulo(3) == 0 ? concat('Fizz') : self end
def buzz; modulo(5) == 0 ? concat('Buzz') : self end
end
[Fixnum, String].each{ |c| c.include(FizzBuzzQuiz) }
p 1.fizz.buzz #=> 1
p 3.fizz.buzz #=> "Fizz"
p 5.fizz.buzz #=> "Buzz"
p 15.fizz.buzz #=> "FizzBuzz"
p 15.buzz.fizz #=> "BuzzFizz"
p 7.fizz.buzz #=> 7
module FizzBuzzQuiz
def gizz; modulo(7) == 0 ? concat('Gizz') : self end
end
p 7.fizz.buzz.gizz #=> "Gizz"
p 21.fizz.buzz.gizz #=> "FizzGizz"
p 35.fizz.buzz.gizz #=> "BuzzGizz"
p 105.fizz.buzz.gizz #=> "FizzBuzzGizz"
p 105.fizz.gizz.buzz #=> "FizzGizzBuzz"
p 105.gizz.buzz.fizz #=> "GizzBuzzFizz"
# 以下も念のため
p 1.fizz.buzz.gizz #=> 1
p 3.fizz.buzz.gizz #=> "Fizz"
p 5.fizz.buzz.gizz #=> "Buzz"
p 15.fizz.buzz.gizz #=> "FizzBuzz"
p 15.buzz.fizz.gizz #=> "BuzzFizz"
p 104.fizz.buzz.gizz #=> 104