豊福@パパイヤです。一から ruby 勉強中です。

  オブジェクトを使ったちょっと面白いプログラムを
思い出したので練習問題がてらに ruby で書いてみま
した。チェーン状につながったフィルタオブジェクト
を通すと合成数はふるい落とされていくというプログ
ラムです。
  「こう書いた方が ruby らしい」など教えて下さい。

class Counter
    def initialize(v)
        @value = v
    end
    def out
        @value += 1
        return @value - 1
    end
end

class Filter
    def initialize(src, f)
        @source = src
        @factor = f
    end
    def out
        loop do
            n = @source.out()
            if n % @factor != 0
                return n
            end
        end
    end
end

class Sieve
    def initialize(src)
        @source = src
    end
    def out
        n = @source.out()
        src = Filter.new(@source, n)
        @source = src
        return n
    end
end


if ! max = ARGV.shift; max = 100; end
max = max.to_i

c = Counter.new(2)
s = Sieve.new(c)

loop do
    n = s.out()
    if n > max
        break
    end
    print n, "\n"
end

---
			豊福@パパイヤ
			unbound / papaya.juice.or.jp
			toyofuku / juice.or.jp