0

mファイル(main.m)があり、このファイルにいくつかの変数があります。

ファイルの最後に、私は次のように書いています。clear all

すべての変数をクリアしたい。そのため、Matlabでmain、関数を実行するために次のように記述しました。

関数が完了したら、MATLABコンソールでの変数の1つの名前を記述しましたmain.m

たとえば、私は変数を書きました:data

驚いたことに、変数が存在します。

clear allがそれを削除しないのはなぜですか?

ありがとうございました。

4

1 に答える 1

4

関数には独自の可変スコープがあります。関数から戻ると、関数のすべてのローカル変数がクリアされ、関数呼び出しの直前に存在していた変数と値が復元されます。唯一の違いは、戻ったばかりの関数の戻り値です。このプロセスは、MATLABデバッガーを使用して簡単に実行できます。最初に最初の関数でいくつかの変数が定義されていることを確認してから、2番目の関数(少なくともLinuxバージョンではF11)にステップインし、次に2番目の関数をステップスルーして最後にステップアウトします。関数に到達returnまたは終了すると、2番目の関数が表示され、2番目の関数のローカル変数がクリアされ、最初の関数の変数が復元されます。

これは、関数内では変数スコープ内のすべての変数のみがクリアさclear allれるため、少なくとも関数内ではワークスペース変数をクリアできないことを意味します。clear all

関数型プログラミングのパラダイムに従う場合、重要なのは独自の関数で作成および変更する変数であるため、通常はワークスペース変数について心配する必要はありません。

于 2012-05-31T19:15:12.143 に答える