7

このコマンドclear classesは、その時点でメモリにロードされたすべてのクラス定義をクリアします。

特定のクラス定義だけをクリアすることはできますか?

EDIT:クラスインスタンスではなく、特定のクラス定義をメモリから削除することに興味があります。

4

3 に答える 3

4

新しい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)がまだ存在しています。

于 2012-05-13T11:11:07.907 に答える
1

これはそれを行う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{:});
于 2012-05-12T21:17:24.957 に答える
0

すべての定数プロパティ データを含むクラス定義をクリアするには、次の両方を実行する必要があります。

  1. クラスのすべてのインスタンスをメモリからクリアする
  2. 問題clear classname

上記の順序で実行する必要があります。順序を逆にすると、(R2013b の時点で)clear classesが発行されるまで、Constant プロパティ データがメモリにスタックされたままになります。

于 2014-02-04T23:20:01.180 に答える