在下面的代码中,类TdcTestResult
的析构函数在函数add
的末尾被调用,因此方法变量mTdcTestResults
将再次变为空。
如何让TdcTestResult
mTdcTestResults
内的实例持久化?
classdef Tdc
properties % (Access = private)
mTestRun = TdcTestRun;
mTestResults = [];
end
methods(Access = public)
function add(obj, componentSerialNumber, testName, testVersion, paramName, unitOfMeasureCode, paramScale, paramLimitTypeCode, paramLowerLimit, paramUpperLimit, responseValue, folderPath, isFailed, isOverridden, overriddenReason)
if(nargin > 0)
obj.mTestResults = [obj.mTestResults TdcTestResult];
obj.mTestResults(end).set(componentSerialNumber, testName, testVersion, paramName, unitOfMeasureCode, paramScale, paramLimitTypeCode, paramLowerLimit, paramUpperLimit, responseValue, folderPath, isFailed, isOverridden, overriddenReason);
obj.mTestRun.addTestResult(obj.mTestResults(end));
end
end
end
end
答案 0 :(得分:0)
TdcTestResult
需要handle
成为超类,否则您的代码无法正常工作。 documentation
如果这没有帮助,请提供代码的可执行示例。
答案 1 :(得分:0)
我认为实际问题是你实际上没有改变obj
。
如果愿意,对TdcTestResult
内的新mTestResults
的引用应该可以防止析构函数被调用。
这与Danial R的答案有关:
如果您未将Tdc
实现为handle
子类,则add
方法必须返回修改后的obj
。
否则,您在add
内所做的更改将丢失。
因此,您必须返回obj
并将调用语法修改为
tdcObject = tdcObject.add(...);
或从handle
继承 - 这可能是更好的选择。