このコマンドclear classes
は、その時点でメモリにロードされたすべてのクラス定義をクリアします。
特定のクラス定義だけをクリアすることはできますか?
EDIT:クラスインスタンスではなく、特定のクラス定義をメモリから削除することに興味があります。
新しいHPFクラスを作成したときに、この問題に自分で遭遇しました。新しいクラスをデバッグしているときに、多くの変更を加えてからテストしたので、いくつか試してみました。
「関数のクリア」は役に立ちません。「clearhpf」も試してみました。しかし、すべてのインスタンスをクリアすることはそうするようです。例えば:
>> x = hpf(3);
>> x+2
ans =
5
>> whos
Name Size Bytes Class Attributes
ans 1x1 248 hpf
x 1x1 248 hpf
y 1x1 8 double
だから今、私はクラスにささいな変更を加えて保存しました。
>> z = hpf(17);
Warning: The class file for 'hpf' has been changed; but the change cannot be applied because objects based on the old class file still exist. If you use
those objects, you might get unexpected results. You can use the 'clear' command to remove those objects. See 'help clear' for information on how to remove
those objects.
>> clear functions
>> clear hpf
>> clear x
>> clear z
>> x = hpf(3);
Warning: The class file for 'hpf' has been changed; but the change cannot be applied because objects based on the old class file still exist. If you use
those objects, you might get unexpected results. You can use the 'clear' command to remove those objects. See 'help clear' for information on how to remove
those objects.
そのため、MATLABにはまだ問題があるという警告が表示されます。ただし、メモリ内にHPFインスタンスがあり、簡単に忘れられてしまいます。
>> clear ans
>> clear x
>> whos
Name Size Bytes Class Attributes
y 1x1 8 double
>> x = hpf(3);
>> x+23
ans =
26
そのインスタンスも削除した限り、MATLABは警告を表示しなくなりました。「クラスのクリア」コマンドを発行する必要がなかったことに注意してください。その事実を証明するために、変数y(double)がまだ存在しています。
これはそれを行う1つの方法です:
%ClassName
インスタンスをクリアしたいクラスの名前と一致するように設定します。
ClassName = 'MyClass';
% コードは次のとおりです。
VarsStruct = whos;
VarsCellArray = cat(3, cellstr(char(VarsStruct(:).name)), cellstr(char(VarsStruct(:).class)));
ClassInstanceIndices = find(ismember(VarsCellArray(:,:,2), ClassName));
ClassInstanceNames = VarsCellArray(ClassInstanceIndices,:,1)';
clear(ClassInstanceNames{:});
すべての定数プロパティ データを含むクラス定義をクリアするには、次の両方を実行する必要があります。
clear classname
。上記の順序で実行する必要があります。順序を逆にすると、(R2013b の時点で)clear classes
が発行されるまで、Constant プロパティ データがメモリにスタックされたままになります。