问题描述
假设在 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
之前定义了 out = func;
,则不会更新。
有没有办法在用户中断时和执行 out
期间使 func
在全局工作区中可用,只要它在 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)
,并在您按下按钮时查看答案,基本上决定何时中断循环。这种方式自然会对性能造成影响,但您在问题中没有提及任何有关性能的内容。