2

MATLAB IDE を使用していて、たまたまワークスペースに非常に大きなオブジェクト (50 万以上の要素の配列など) があるとします。ここで、私がばかげて、これらの非常に大きな変数の 1 つを誤ってダブルクリックして、配列エディターへのロードをトリガーしたとします。残念ながら、配列がこれだけ大きいと、MATLAB がハングアップするだけです。

CTRL+C、CTRL+BREAK、CTRL+D を試しましたが、どれも IDE の動作を中断できないようです。matlab を強制終了できることはわかっていますが、最初にこれらの変数をすべてワークスペースに読み込むには時間がかかり、エディター ウィンドウなどで変更を保存していない可能性があります。

4

2 に答える 2

5

変数エディターは、コマンドを使用して起動されopenvarます。問題を解決するには、関数が同じ名前の変数によってマスクされるようにする Matlab の癖を利用できます。たとえば、関数という名前plotの変数を作成すると、関数は機能しなくなりplot()ます。

解決策はハックですが、単に という名前の空の変数を作成することですopenvaropenvar関数が変数によって隠されているため、変数エディターを開こうとするといつでも失敗します。

変数エディターを再度使用する場合は、単純な呼び出し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

そのハンドルを取得することが最大の問題です。それを呼び出すことは問題ありません。組み込みの場合は、関数builtinopenvarを使用できます。

builtin('openvar',name,array)

しかし、残念ながらそうではありません:(完全なパスと組み合わせた
str2funcも機能しません。少なくとも私はそれを機能させません...

于 2012-08-02T16:14:20.667 に答える