【发布时间】:2017-08-21 18:42:26
【问题描述】:
我正在使用一个名为“PathObj_Standard”的自定义类。我想确保当我加载这个类时,如果属性 CalcDate 被保存为一个单元格数组,它将被转换为一个标准数组。但是,我前段时间更改了类定义,所以当我使用 loadobj 函数时,我得到的是一个结构而不是一个对象。我使用的原始代码具有更多属性,因此我宁愿不通过将结构中的属性分配给新对象来创建新对象。此外,我也不愿更改构造函数以接受结构作为参数。
我尝试在 loadobj 中使用类函数,但我得到一个 Cannot redefine class 'PathObj_Standard' without a call to 'clear classes' 错误。这个函数不应该强制将结构转换为对象吗?为什么它在 loadobj 函数中不起作用?
classdef PathObj_Standard < handle
properties (SetAccess = protected)
CalcDate;
Name;
end
methods(Static)
function obj=loadobj(s)
if isstruct(s)
obj=class(s,'PathObj_Standard');
else
obj=s;
end
if not(isempty(obj.CalcDate)) && iscell(obj.CalcDate)
obj.CalcDate=cell2mat(obj.CalcDate);
end
end
end
methods
function obj=PathObj_Standard(Name,CalcDate)
obj.Name=Name;
obj.CalcDate=CalcDate;
end
end
【问题讨论】:
标签: matlab class oop object matlab-struct