Dňa Utorok 07 Február 2006 03:33 Mark Volkmann napísal:
I understand that the code in the else part of a begin block is only
executed if no exceptions are raised by code in the begin block.
However, the same is true of code at the end of the begin block. Why
not put the code there?
For example, I believe these are equivalent.
begin
do_something
rescue
handle_exception
else
do_more_stuff
end
begin
do_something
do_more_stuff
rescue
handle_exception
end
I suppose a difference is that if "do_more_stuff" raises an exception,
the first example can't rescue it and the second might. Is that the
only difference?
--
R. Mark Volkmann
Partner, Object Computing, Inc.
There's an else part in a begin / end block?! Oh dear. Heavens protect us...
It seems pretty equivalent to plain old:
begin
do_something
rescue
handle_exception
end
do_more_stuff
Do we have a syntax guru to elaborate on this?
That said, my wild guess would be that in the code fragment (apologies for
using different method names):
begin
foo
rescue
bar
else
baz
finally
quux
end
(*sic* - messiest code excerpt ever)
if #foo didn't raise an Exception, the order of executions would be #foo,
#baz, and then #quux. That is, unless the else is nothing more than no-op
syntactic sugar for just putting the statements after a begin / rescue /
finally block.
David Vallner
Confused like hell