7

该命令clear classes清除当时加载到内存中的所有类定义。

是否可以只清除特定的类定义?

编辑:我感兴趣的是从内存中删除特定的类定义,而不是类实例。

4

3 回答 3

4

当我编写新的 HPF 类时,我自己也遇到了这个问题。所以我尝试了一些东西,因为当我调试新类时,我做了很多更改,然后进行测试。

“清除功能”没有帮助。我什至尝试过“清除 hpf”。但清除所有实例似乎确实如此。例如:

>> 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

这是一种方法:

% 设置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

必须按上述顺序进行。颠倒顺序将使 Constant 属性数据停留在内存中(截至 R2013b),直到clear classes发布。

于 2014-02-04T23:20:01.180 回答