要摆脱截止靠背的尝试/捕获,请使用
cleanme = oncleanup(@()删除(WB));
如果你把它放在一个函数中,你甚至不需要在迭代结束时自己删除等待条——等待条将在函数正常返回时被删除。当函数因为error()而终止时,等待条也将被删除,因此变量将被删除。
(如果您愿意,您仍然可以提前删除助手栏,例如如果要启动不同的服务栏。)
在try/catch中禁用某些优化的原因:
当您有一个没有try/catch的函数时,那么与执行引擎的隐式“契约”就是执行引擎将执行代码所暗示的操作,并在函数返回时准备好答案。
注意,我并没有说它将按顺序执行代码行:MATLAB允许根据操作的“含义”而不是代码行的详细说明重写操作。
例如,如果你有一个循环
D(k) = a (k) + b (k) .* c (k);
在一些情况下,MATLAB能够识别出一个特定的操作,比如W * X * W',它意味着得到的矩阵的一些性质,因为它能够在同一行的其他操作上采取更有效的计算路径。同样,在理论上,如果MATLAB认识到一个特定的操作应该返回一个对称的结果,那么MATLAB只允许实际
做
一个三角形,并从上半场结果填充下半年。
也就是说:
在那里
是
一个与程序员的“契约”,即在Catch异常发生时,变量将处于一种状态
好像
在出现异常之前,这些行一直按照编写的方式执行。MATLAB发现,实现这一点的最简单的方法有时是在try/catch中禁用一些优化。
理论上,限制应该仅适用于直接在Try块内显示的代码,以及讲述任何一个被解除覆盖的例程,以至于它们不允许为尝试时范围内的变量执行此操作。.嵌套函数可以共享变量,以便它们可能需要盗贼。但
叫
不做的功能不必危机,因为它们具有自己的合同及其内部变量,可能在所谓的异常情况下无法返回给呼叫者常规。