18

あなたが新しいプログラマーで、次のようなことをするとしましょう...

%...la da da
%...programming away
if such && such
    clear = 1;
else 
    clear = 0;
end 

または他の方法で、変数clearに値を割り当てます。

「クリア」する方法はありclearますか?

clearvars動作しません。ワークスペース変数をクリックして手動で削除をクリックしても機能しますが、不正行為だと思います。

4

4 に答える 4

27

これはそれを行います:

builtin('clear','clear')

注:コードを明確に保つために、このような操作は避けるようにしてください。実行したい正確なアクションである場合にのみ、上書きしてください。そうしないと、clear (またはその他の) 関数が上書きされていることを忘れた場合 (または他の人がコードを使用していて気付かなかった場合) に、将来のバグが発生する可能性があります。doClearたとえば、この変数に簡単に名前を付けることができます。

于 2013-08-21T14:51:47.090 に答える
8

任意の名前、さらにbuiltinfeval上書きできます。このような場合、代わりに関数ハンドルを使用して、MALTAB にステートメントを関数呼び出しとして解釈させることができます。

clear = str2func('clear');
clear('clear')

もちろん、str2funcオーバーライドも可能です!:) ただし、同じことを行う別の m-file を作成する同様のソリューション ( Loren の記事に触発された) が存在します。

function clearclear()
    assignin('caller', 'clear', @clear);

clear('clear')メインワークスペースでこの関数を呼び出すと、安全に実行できるはずです。

2 番目の解決策は、m ファイルがメイン ワークスペース内の変数を「認識」しないという事実を利用しているclearため、関数の実際のハンドルにclear適切にアクセスできます。

于 2013-08-21T17:30:36.390 に答える
0

面白い問題!プログラムでこれを行う方法を見つけるのは驚くほど難しいことがわかりました(@TryHardによって提案されたもの以外に)

よりも少し強力ですが、私が思いついたのは次のclearとおりです。

!matlab &
exit

これをコマンド ラインで一度に入力する場合は、間に Shift+Enter を使用する必要があることに注意してください。

于 2013-08-21T15:20:42.190 に答える