Folgende Klasse stellt einen Java-ähnlichen Iterator für alle Objekte, die eine 'each' methode haben, bereit.
class Iterator
def initialize(enum)
@enum = enum
@current = nil
@back = nil
@enum.each do |el|
@current = el
callcc do |cc|
@next = cc
if @back then @back.call else return end
end
end
@current = nil
@back.call if @back
end
def hasNext?
@current != nil
end
def next
last = @current
callcc do |cc|
@back = cc
@next.call if @current
end
last
end
end
iter = Iterator.new(1..3)
while iter.hasNext?
puts iter.next
end
1 2 3