matlab无法定义块,无法在Matlab中更新类定义

我正在遇到Matlab的一个令人生气的问题,不幸的是,一个

earlier answer显然同样的问题并没有帮助我.我很抱歉这个问题很长 – 你需要相当多的信息才能重现问题(我尽可能多地修剪它……)

问题在于:无论我做什么,在使用课程后我都无法“让Matlab忘记”.使用的值似乎是持久的,对类定义的编辑不会“粘住”.在后一种情况下,错误消息是:

Warning: The class file for ‘myClass’ 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 all

>> clear functions

>> clear ans

尽管我试图清除它,但不知何故,类定义是持久的.更糟糕的是,当我修改类的实例的值,然后清除它时,值不会被“遗忘”.为了说明,这里是myClass的源代码:

% a simple class definition that shows the problem that I cannot

% figure out how to redefine a class without restarting Matlab

classdef myClass < handle

properties

precursors = {'none'};

numPre = {1};

value = 1;

end

methods

function obj = myClass(pre, num, val)

% constructor

if nargin > 0

obj.precursors = pre;

obj.numPre = num;

obj.value = val;

end

end

function v = sumVal(obj)

% find the sum of the value of all precursors

n = numel(obj.precursors);

v = 0;

for ii = 1:n

pc = obj.precursors{ii};

if isa(pc, 'myClass')

if ii==1

v = 0;

end

v = v + sumVal(pc) * obj.numPre{ii};

else

v = obj.value;

end

end

end

end

% only the following named instances may exist:

enumeration

grandpa ({'none'}, {1}, 1)

father ({myClass.grandpa}, {3}, -1)

son ({myClass.father}, {2}, -1)

end

end

在Matlab的新实例中,我执行以下操作:

>> son = myClass.son;

>> sumVal(son)

ans =

6

>> grandpa = myClass.grandpa;

>> grandpa.value = 5;

>> sumVal(son)

ans =

30

到现在为止还挺好. sumVal函数发现父亲和祖父,并且sumVal被正确计算(第一种情况下为6 * 1,第二种情况下为6 * 5).

现在我删除“一切”(我认为):

>> clear all

>> clear functions

>> clear ans

我只创建一个变量:

>> son = myClass.son;

现在是踢球者 – 意想不到的答案

>> sumVal(son)

ans =

30

当我检查加载的变量时,我发现

>> whos

Name Size Bytes Class Attributes

son 1x1 112 myClass

没有爷爷实例,并且未触及类定义文件.然而,爷爷(我创建,然后删除)的价值在某种程度上是持久的.

当我对myClass.m文件做一个小改动,并尝试创建一个新变量(在清除全部之后)后,我得到上面显示的消息.所有这些都引出了我的问题:

Matlab隐藏了我的类的一个实例,以便变量在清除之后是持久的,如何清除工作区(不重新启动),以便类定义“重置”?

我不知道是否重要,但我使用的是Matlab 7.14.0.739(R2012a)

你可能感兴趣的:(matlab无法定义块)