假设我正在使用 MATLAB IDE,并且在我的工作区中碰巧有一些非常大的对象(例如 500k+ 元素的数组)。现在,假设我愚蠢地不小心双击了这些非常大的变量之一,这触发了对数组编辑器的加载。不幸的是,有了这么大的数组,MATLAB 就挂了。
我试过 CTRL+C、CTRL+BREAK、CTRL+D,但似乎没有一个能够中断 IDE 的行为。我知道我可以强制 matlab 退出,但是首先将所有这些变量读入工作区需要很多时间,而且我可能在编辑器窗口等中有未保存的更改。
变量编辑器使用命令启动openvar
。要解决您的问题,您可以利用 Matlab 怪癖,它会导致函数被同名的变量屏蔽。例如,如果您创建一个名为plot
该plot()
函数的变量,该函数将停止工作。
解决方案虽然很老套,但只是简单地创建一个名为openvar
. 然后任何时候尝试打开变量编辑器都会失败,因为该函数openvar
被变量隐藏了。
如果您想再次使用变量编辑器,只需简单调用clear openvar
即可删除变量,该函数将被取消屏蔽。
我找到了一种方法,但这不是最好的,它需要更改路径并返回一次才能获得原始的句柄openvar
function openvar(name,array)
persistent org_openvar
if isempty(org_openvar)
curdir=pwd;
cd(fullfile(matlabroot,'toolbox/matlab/codetools'));
org_openvar = @openvar;
cd(curdir);
end
if numel(array)>1e5
if strcmp(questdlg(sprintf('Opening ''%s'' which has %d elements.\n\nAre you sure? This is gonna take a while!',name,numel(array)), ...
'Variable editor','Yes','Cancel','Cancel') , 'Yes')
org_openvar(name,array)
end
else
org_openvar(name,array)
end
end
得到那个句柄是最大的问题,调用它就好了。如果openvar
是内置的,您可以使用内置函数:
builtin('openvar',name,array)
但不幸的是,情况并非如此:(
str2func与完整路径相结合也不起作用,至少我没有让它起作用......