我有一个类,它有一些属性,并且有 2 个相关,在示例中称为param1, param2
。他们是独立的,只是受到约束。param2
必须一样大或大于param1
并且必须始终存在,如果param1
做。有问题的代码类似于:
function set.param1(obj, input)
disp('setting param1')
obj.param1 = input;
if (isempty(obj.param2) || obj.param2 < obj.param1) % Warning on param2
obj.param2 = obj.param1; % Warning on param2
end
end
类似的代码为set.param2
。
代码工作正常,我看不出有更好的方法来做到这一点。问题 - 它产生警告“设置方法......”,如标题中提到的。由于缺乏更好的解决方案,我压制了他们。
有没有更好的方法来实现此功能并且没有警告?显然不是像隐藏函数那样的黑客“解决方案”SetParam2
:
function SetParam2(obj, input)
obj.param2 = input;
end
这让编辑感到困惑,但它并没有抱怨。
您可以使用两层属性
- 一层是暴露的并且
Dependent
- 一层是私有的,实际存储值
文档中使用了类似的技术:避免属性初始化顺序依赖.
classdef TestClass < handle
properties (Access = private)
privateParam1;
privateParam2;
end
properties (Dependent)
param1;
param2;
end
methods
function p1 = get.param1(obj)
p1 = obj.privateParam1;
end
function p2 = get.param2(obj)
p2 = obj.privateParam2;
end
function set.param1(obj, input)
obj.privateParam1 = input;
if (isempty(obj.privateParam2) || obj.privateParam2 < obj.privateParam1)
obj.privateParam2 = obj.param1;
end
end
function set.param2(obj, input)
if (~isempty(obj.privateParam1) && obj.privateParam1 > input)
obj.privateParam2 = obj.privateParam1;
else
obj.privateParam2 = input;
end
end
end
end
这里的技巧是:privateParam1
and privateParam2
存储两个值。 get 和 set 仅针对公开的属性实现param1
and param2
: the get
仅返回内部属性并在set
它们都可以在没有分析器警告的情况下使用,因为它们被标记为Dependent
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)