Hi, in the code below I want “retry/break/XXXXX” (undefined) in SECOND
BEGIN
to go back to FIRST BEGIN when “raise” instead of SECOND BEGIN but it
goes to
SECOND BEGIN.
I think it’s the expected behaviour but maybe there is a way to get what
I
want, is it possible?
class MyTcpServer < GServer
def serve(io)
loop do
begin # FIRST BEGIN
puts “welcome”
…
…
begin # SECOND BEGIN
raise
rescue
puts “ERROR”
retry/break/return/XXXXX # Restart from FIRST BEGIN (doesn’t
work)
end
…
…
rescue
$stderr.print "serve(io) ERROR: " + $!
end
end # loop do
end # def serve(io)
Thanks a lot.
On Apr 2, 6:27 pm, Iñaki Baz C. [email protected] wrote:
Hi, in the code below I want “retry/break/XXXXX” (undefined) in SECOND BEGIN
to go back to FIRST BEGIN when “raise” instead of SECOND BEGIN but it goes to
SECOND BEGIN.
I think it’s the expected behaviour but maybe there is a way to get what I
want, is it possible?
Can you combine the two?
...
...
rescue NameError # or whatever class of error you want to catch
$stderr.print "serve(io) ERROR: " + $!
rescue # most other stuff
From: Iñaki Baz C. [mailto:[email protected]]
loop do
begin # FIRST BEGIN
puts “welcome”
…
…
begin # SECOND BEGIN
raise
rescue
puts “ERROR”
retry/break/return/XXXXX
Restart from FIRST BEGIN (doesn’t work)
end
…
…
rescue
$stderr.print "serve(io) ERROR: " + $!
end
end # loop do
end # def serve(io)
your first begin is anchored on a loop, so you can use retry.
eg,
C:\family\ruby>cat test.rb
loop do
begin # FIRST BEGIN
puts “first welcome”
begin # SECOND BEGIN
raise "triggered ERROR in second begin"
rescue =>e
puts "rescuing error: "+e.message
puts "retrying to first welcome.."
sleep 1 # put this to slow down
next # this goes back to next loop
end
rescue
puts “Error in first welcome”
end
puts “this is never executed in this example :)”
end
C:\family\ruby>ruby test.rb
first welcome
rescuing error: triggered ERROR in second begin
retrying to first welcome…
first welcome
rescuing error: triggered ERROR in second begin
retrying to first welcome…
first welcome
rescuing error: triggered ERROR in second begin
retrying to first welcome…
first welcome
rescuing error: triggered ERROR in second begin
retrying to first welcome…
test.rb:10:in `sleep’: Interrupt
from test.rb:10
kind regards -botp
your first begin is anchored on a loop, so you can use retry.
sorry typo, that should be “next” instead, as show in example
El Jueves, 3 de Abril de 2008, yermej
escribió:> > rescue NameError # or whatever class of error you want to
catch $stderr.print "serve(io) ERROR: " + $!
rescue # most other stuff
puts "ERROR"
retry/break/return/XXXXX # Restart from FIRST >
end end # loop do
But what I want is going back to the previous/parent loop.
El Jueves, 3 de Abril de 2008, Peña, Botp escribió:
sleep 1 # put this to slow down
rescuing error: triggered ERROR in second begin
retrying to first welcome…
first welcome
Yeah !! thanks a lot, I was looking for it but I’ve not found that
“next”
command anywhere. Thanks