I think this is cool, ruby iterators and continuations

=begin

This might be old hat to some, but I just figured out how to make an
iterator so that if I get some kind of failure, it will return the
element and try again on the same iteration. The code below is just a
simulation, but now that I have this example working, I know how to
code what I really want. This feature of ruby really impresses me
alot !

=end

···

#####################################

$fail = true

$cont = nil

def proc_tab
  statement = ["first statement", "second statement",
  "third statement"]

    statement.each_with_index do |stat,idx|
      if $cont
        cont = $cont
        $cont = nil
        cont.call
      end
# simulate a failure on index 1
      callcc {|cont| $cont = cont } if idx == 1 and $fail
      $fail = false if $cont
      yield stat
    end
end

["searchCIO","searchCRM"].each do |site|
  (1..5).each do |art|
    $fail = true
    puts site + "->" + art.to_s
    proc_tab do |stat|
      puts "stat:" + stat
    end
  end
end

I'm not sure how useful it is to signal failure in the block of
proc_tab (seems like that would be something to go in the method body
instead; i.e., check the value and fix it/skip it/whatever before you
yield it to the block). But in any case, I don't think you actually
need continuations for this...

$fail = false

class IterError < Exception; end

def proc_tab
  statement = ["first statement",
               "second statement",
               "third statement"]
  statement.each_index { | idx |
    begin
      # simulate a failure on index 1
      yield statement[idx]
      raise IterError if idx == 1 and $fail
    rescue IterError
      $fail = false
      retry
    end
  }
end

["searchCIO", "searchCRM"].each { | site |
  (1..5).each { | art |
    $fail = true
    puts site + "->" + art.to_s
    proc_tab { | stat |
      puts "stat:" + stat
    }
  }
}

Regards,
Jordan

···

On Dec 4, 1:18 pm, "wbsurf...@yahoo.com" <wbsurf...@gmail.com> wrote:

=begin

This might be old hat to some, but I just figured out how to make an
iterator so that if I get some kind of failure, it will return the
element and try again on the same iteration. The code below is just a
simulation, but now that I have this example working, I know how to
code what I really want. This feature of ruby really impresses me
alot !

=end

#####################################

$fail = true

$cont = nil

def proc_tab
  statement = ["first statement", "second statement",
  "third statement"]

    statement.each_with_index do |stat,idx|
      if $cont
        cont = $cont
        $cont = nil
        cont.call
      end
# simulate a failure on index 1
      callcc {|cont| $cont = cont } if idx == 1 and $fail
      $fail = false if $cont
      yield stat
    end
end

["searchCIO","searchCRM"].each do |site|
  (1..5).each do |art|
    $fail = true
    puts site + "->" + art.to_s
    proc_tab do |stat|
      puts "stat:" + stat
    end
  end
end