12.1.3 从错误中恢复

Octave 提供了几种从错误中恢复的方法。有 try/catch 块、unwind_protect/unwind_protect_cleanup 块,以及最后的 onCleanup 命令。

onCleanup 命令将一个普通的 Octave 变量(触发器)与一个任意函数(动作)关联起来。每当 Octave 变量不再存在时——无论是由于函数返回、错误,还是仅仅因为该变量已通过 clear 删除——都会执行所分配的函数。

该函数可以执行任何必要的清理操作,例如关闭打开的文件句柄、打印错误消息或将全局变量恢复为其初始值。最后一个例子是 Octave 代码中一个非常方便的惯用写法。例如:

function rand42
  old_state = rand ("state");
  restore_state = onCleanup (@() rand ("state", old_state));
  rand ("state", 42);
  ...
endfunction  # rand generator state restored by onCleanup
 
obj = onCleanup (function)

创建一个特殊对象,该对象在销毁时执行给定的函数 function

如果该对象被复制到多个变量(或元胞数组或结构体数组元素)或从函数返回,则 function 将仅在该对象的最后一个副本被清除后才执行。

输入 function 是一个函数句柄。该句柄可以指向一个匿名函数,以便将命令直接放置在 onCleanup 调用中。

编程注意:如果创建了多个局部 onCleanup 变量,则它们的调用顺序是未指定的。类似功能,另请参阅 unwind_protect 语句

示例:

octave:1> trigger = onCleanup (@() disp ('onCleanup was executed'));
octave:2> clear trigger
onCleanup was executed
octave:3

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

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