清除MATLAB中的类定义

时间:2012-05-12 18:58:19

标签: oop class matlab

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

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

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

3 个答案:

答案 0 :(得分: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也不再给我一个警告。请注意,我从未发出过“clear classes”命令。变量y,一个双,仍然存在以证明这一事实。

答案 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{:});

答案 2 :(得分:0)

要清除类定义(包括所有Constant属性数据),必须执行以下两个操作

  1. 从内存中清除该类的所有实例
  2. 问题clear classname
  3. 必须按上述顺序完成。撤销订单会使常量属性数据卡在内存中(自R2013b起),直到clear classes发出。