2

假设我正在使用 MATLAB IDE,并且在我的工作区中碰巧有一些非常大的对象(例如 500k+ 元素的数组)。现在,假设我愚蠢地不小心双击了这些非常大的变量之一,这触发了对数组编辑器的加载。不幸的是,有了这么大的数组,MATLAB 就挂了。

我试过 CTRL+C、CTRL+BREAK、CTRL+D,但似乎没有一个能够中断 IDE 的行为。我知道我可以强制 matlab 退出,但是首先将所有这些变量读入工作区需要很多时间,而且我可能在编辑器窗口等中有未保存的更改。

4

2 回答 2

5

变量编辑器使用命令启动openvar。要解决您的问题,您可以利用 Matlab 怪癖,它会导致函数被同名的变量屏蔽。例如,如果您创建一个名为plotplot()函数的变量,该函数将停止工作。

解决方案虽然很老套,但只是简单地创建一个名为openvar. 然后任何时候尝试打开变量编辑器都会失败,因为该函数openvar被变量隐藏了。

如果您想再次使用变量编辑器,只需简单调用clear openvar即可删除变量,该函数将被取消屏蔽。

于 2012-08-02T14:42:42.667 回答
2

我找到了一种方法,但这不是最好的,它需要更改路径并返回一次才能获得原始的句柄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与完整路径相结合也不起作用,至少我没有让它起作用......

于 2012-08-02T16:14:20.667 回答