octave: The unwind_protect Statement
10.8 The unwind_protect Statement
=================================
Octave supports a limited form of exception handling modeled after the
unwind-protect form of Lisp.
The general form of an ‘unwind_protect’ block looks like this:
unwind_protect
BODY
unwind_protect_cleanup
CLEANUP
end_unwind_protect
where BODY and CLEANUP are both optional and may contain any Octave
expressions or commands. The statements in CLEANUP are guaranteed to be
executed regardless of how control exits BODY.
This is useful to protect temporary changes to global variables from
possible errors. For example, the following code will always restore
the original value of the global variable ‘frobnosticate’ even if an
error occurs in the first part of the ‘unwind_protect’ block.
save_frobnosticate = frobnosticate;
unwind_protect
frobnosticate = true;
...
unwind_protect_cleanup
frobnosticate = save_frobnosticate;
end_unwind_protect
Without ‘unwind_protect’, the value of FROBNOSTICATE would not be
restored if an error occurs while evaluating the first part of the
‘unwind_protect’ block because evaluation would stop at the point of the
error and the statement to restore the value would not be executed.
In addition to unwind_protect, Octave supports another form of
exception handling, the ‘try’ block.