Matlab 在脚本中止时运行清理代码

Matlab 在脚本中止时运行清理代码,matlab,Matlab,我肯定以前有人问过这个问题,但我就是找不到 我想做的是在脚本运行时中止(CTRL+C)脚本时运行一些代码,例如,如果打开一个文件,即使中止或出现错误,我也希望close命令运行 在其他语言中类似于try\finally,只是在中止时没有错误,所以try\catch在这里不起作用 谢谢。您不能自定义CTRL-C快捷键 请参见matlab文档中的。看一看,它正是为了这个目的而设计的 onCleanup创建一个对象,当它超出范围(因此被删除)时,该对象将执行一些代码。那么比如说, c1 = onCle

我肯定以前有人问过这个问题,但我就是找不到

我想做的是在脚本运行时中止(CTRL+C)脚本时运行一些代码,例如,如果打开一个文件,即使中止或出现错误,我也希望close命令运行

在其他语言中类似于try\finally,只是在中止时没有错误,所以try\catch在这里不起作用


谢谢。

您不能自定义CTRL-C快捷键

请参见matlab文档中的。

看一看,它正是为了这个目的而设计的

onCleanup
创建一个对象,当它超出范围(因此被删除)时,该对象将执行一些代码。那么比如说,

c1 = onCleanup(@() disp('goodbye'))
创建对象
c1
。当
c1
超出范围时,它将被删除,并显示
bye
。同样地

c2 = onCleanup(@() fclose(fid))
创建一个对象,该对象在删除时将关闭ID为fid的文件

您需要对编码风格进行更改,以利用清理后的
onCleanup
——具体地说,您需要以函数而不是脚本的形式实现。脚本使用基本工作区,因此当完成时,您创建的任何清理对象都会保留在基本工作区中,而不会超出范围并被删除,因此它们的代码永远不会执行

相反,函数有自己的工作空间,当它们完成时,工作空间将被清除,并自动删除任何清理对象。重要的是,对于您的问题,不仅当函数正常完成时,而且当它以错误结束时,甚至当它以CtrlC结束时,此工作区都会被清除

将脚本修改为函数通常很简单:如果脚本名为
mytest.m
,只需将
function mytest
放在脚本顶部即可。在某些情况下,这将不起作用(例如,如果您的脚本依赖于基础工作区中可用的其他变量),但这些情况无论如何都不是一个好主意

例如,运行以下程序:

function mytest

c = onCleanup(@() disp('goodbye'));

for i = 1:1000000
    disp(i)
end

在执行过程中,点击CtrlC。您应该看到,
再见
显示在最后一个数字之后。

参见Java实现。[Matlab:实现CTRL+C的功能,但在代码中][1]。[1] :在我的Matlab 2014b上,这不起作用。按ctrl-c停止循环,但不显示
再见
@FrankMeulenaar我现在没有14b可用,但我刚刚在14a和16a上测试了它,它工作正常。