10.8 unwind_protect 语句

Octave 支持一种有限形式的异常处理,该机制模仿了 Lisp 语言的 unwind-protect 形式。

unwind_protect 块的一般形式如下:

unwind_protect
  body
unwind_protect_cleanup
  cleanup
end_unwind_protect

其中 bodycleanup 都是可选的,并且可以包含任何 Octave 表达式或命令。cleanup 中的语句保证无论控制流如何退出 body,都会被执行。

这对于保护对全局变量的临时更改免受可能出现的错误影响非常有用。例如,以下代码将始终恢复全局变量 frobnosticate 的原始值,即使在 unwind_protect 块的第一部分发生错误也是如此。

save_frobnosticate = frobnosticate;
unwind_protect
  frobnosticate = true;
  ...
unwind_protect_cleanup
  frobnosticate = save_frobnosticate;
end_unwind_protect

如果没有 unwind_protect,则在执行 unwind_protect 块的第一部分时如果发生错误,frobnosticate 的值将不会被恢复。因为计算会在错误点停止,用于恢复值的语句将不会被执行。

除了 unwind_protect 之外,Octave 还支持另一种形式的异常处理,即 try 块。

版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-4