假设在func.m
中我们有
function out = func(in)
for i=1:1000
out=i;
end
end
在Matlab cmd中输入>> out = func;
后,用户用Ctrl+C中断命令执行。
out
不是等于1到1000之间的某个整数,而是out
在全局工作区中不可用。如果在调用out = func;
之前已经定义了out
,则不会对其进行更新。
有没有一种方法可以在用户中断时和执行func
期间使out
在全局工作区中可用,只要它是在func
中定义的?
如果有办法的话,同样的方法会适用于函数因抛出错误而中断的情况吗?
(如果获得的便利是关于一个功能,这可能看起来微不足道。毕竟,向硬盘驱动器写入和稍后从硬盘驱动器读取始终是一种选择,尽管不是一种有效的选择。多年来,在很多功能中,这样的功能对我来说都很方便,并提高了我的生产力。所以我终于问了。(
因此,这里有一个解决方案,可以通过按下消息框上的按钮来中断循环。。。。不是ctrl-c,而是中断循环的另一种方法:
function out=interrupted_loop_example(in)
f = msgbox('break the loop?') ;
%---------- this is a sample loop:
out=in;
while(~breakloop(f))
out=out+1;
end
%--------------------------------
% clean up:
if ishandle(f) ; delete(f) ; end % to kill the msgbox
% helper function
function x = breakloop(f)
drawnow ; % allowing matlab to detect a button was pressed
x = ~ishandle(f) ;
复制该函数,运行它,例如interrupted_loop_example(100)
,并在按下按钮时查看ans,基本上决定何时中断循环。当然,这样会对性能造成影响,但您在问题中没有提到任何关于性能的内容。