我在MATLAB App Designer中定义了一个私有属性列表,它们初始化如下:
properties (Access = private)
prop1 = val1;
prop2 = val2;
...
end
我现在想要一个函数将它们重置为上面定义的默认值。有没有办法自动执行此操作或我必须手动重置它们(这可能会导致错误,例如,当添加更多属性时)?
另外,有没有办法循环我用这种方式定义的所有属性?
答案 0 :(得分:1)
如果您想重置仅私有属性,可以使用metaclass
访问属性的属性并根据需要进行调整。
例如:
classdef SOcode < handle
properties
a
b
end
properties (Access = private)
c = -1
d = -1
end
methods
function self = SOcode()
end
function changeprivate(self)
self.c = randi(5);
self.d = randi(5);
end
function printprivate(self)
fprintf('c = %d\nd = %d\n', self.c, self.d)
end
function resetprivate(self)
tmp = metaclass(self);
props = tmp.PropertyList;
nprops = numel(props);
for ii = 1:nprops
if strcmp(props(ii).SetAccess, 'private')
self.(props(ii).Name) = props(ii).DefaultValue;
end
end
end
end
end
提供所需的行为:
>> test = SOcode;
>> test.changeprivate;
>> test.printprivate;
c = 1
d = 1
>> test.resetprivate;
>> test.printprivate;
c = -1
d = -1