def makeIteratorClass(&block)
  Class.new do
    def initialize init
      @init = init
    end
    define_method :getNext do
      @init = block.call @init
    end
  end
end

def test
  c = makeIteratorClass {|x| x + 1}
  o = c.new 10
  p o.getNext
  p o.getNext
  p o.getNext
end

test