「FizzBuzzクイズ」クイズ-Ruby編 の記事が目に飛び込んできたので自分も試しに解いてみました。
fizzbuzz.rb
class FizzBuzz
def initialize(receiver)
@receiver = receiver
@value = ''
end
def fizz
@value << 'Fizz' if @receiver % 3 == 0
self
end
def buzz
@value << 'Buzz' if @receiver % 5 == 0
self
end
def to_s
value.to_s
end
def inspect
value.inspect
end
private
def value
@value == '' ? @receiver : @value
end
end
class Integer
def fizz
FizzBuzz.new(self).fizz
end
def buzz
FizzBuzz.new(self).buzz
end
end
1.upto(100) do |i|
puts i.fizz.buzz
end
メソッドを呼び出した段階で FizzBuzz オブジェクトに変換して後はその中で処理を行うようにしました。
追記
投稿した後に気づいたのですが、下記の部分を満たしていなかったですね
3の倍数の引数(レシーバー)を与えると"Fizz"を返し、5の倍数を与えると"Buzz"を返すメソッドを適当なクラス(あるいはモジュール)に定義せよ