matlab.mixins.Copyable在分配时是否自动复制 短版
是否有可能获得matlab.mixins.Copyable在分配时是否自动复制 短版,matlab,oop,handle,Matlab,Oop,Handle,是否有可能获得Copyable子类的句柄而不是副本 上下文 我有一个类层次结构,我希望它是可复制的 classdef A < matlab.mixins.Copyable properties stuff; end methods function action(self) % ... end end end 问题出现了 multiA类通过了一些基本的单元测试,我开始尝试应用它。它
Copyable
子类的句柄而不是副本
上下文 我有一个类层次结构,我希望它是可复制的
classdef A < matlab.mixins.Copyable
properties
stuff;
end
methods
function action(self)
% ...
end
end
end
问题出现了
multiA
类通过了一些基本的单元测试,我开始尝试应用它。它似乎在起作用。然后我遇到了一种情况,multi.action()
似乎在两种行为之间不可预测地来回翻转
这似乎不太可能,但可以想象的是,在我转到另一个子类之后,OneSubClass
类型的对象仍然存在
(错误的?)解决方案
编写一个单元测试,在实例化时捕获每个元素的句柄,并检查在实例化下一个元素之前该句柄是否仍在使用。比如:
multiA.nextElement();
ehdl = multiA.currentElement;
% do things
testCase.veriftySameHandle(multiA.currentElement,ehdl);
唉ehdl
似乎是存储元素的副本,而不是它的句柄,即使我没有显式调用copy()
。(我这样说是因为ehdl
保留了nextElement()时所包含对象的状态,而currentElement
的新访问显示了预期的更改。)
有没有一种方法可以强制保留从matlab.mixins.Copyable
派生的对象的句柄?下一个元素nextElement
中的第三行应该是这样的?:self.currentElement=self.elements{self.iElement}()代码>是。当然我发现分成两部分比较容易理解,但这就是要点。上面显示的代码就是您正在使用的实际代码。我可以看到一些错误,这些错误似乎使上面的代码无法实际运行。不,这是我在这里键入的摘要。直到最近,matlab还不是我在这方面有很多经验的语言,所以我仍在培养观察其正确性或不足的能力。既然您提到了它,我可以看出我至少遗漏了5(1)个self实例。
@dmckee告诉您“在比较句柄对象时,使用=
测试对象是否具有相同的句柄。使用isequal
确定具有不同句柄的对象是否具有相同的属性值。”?
multi = multiA();
multi.addElement( @OneSubClass );
multi.addElement( @AnotherSubClass );
multi.addElement( @ThirdSubClass );
% ...
multi.nextElement();
multi.action();
multiA.nextElement();
ehdl = multiA.currentElement;
% do things
testCase.veriftySameHandle(multiA.currentElement,ehdl);