Ziz*_*her 3 oop matlab warnings
在名为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
Run Code Online (Sandbox Code Playgroud)
的类似代码set.param2。代码工作正常,我看不到任何更好的方法。问题 - 它产生警告“设置方法......”,如标题中所述。由于缺乏更好的解决方案,我压制了它们。有没有更好的方法来实现这个功能并且没有警告?显然不是像隐藏功能这样的hacky“解决方案” SetParam2:
function SetParam2(obj, input)
obj.param2 = input;
end
Run Code Online (Sandbox Code Playgroud)
这足以让编辑器感到困惑,它不会抱怨。
您可以使用两层属性
Dependent文档中使用了类似的技术:Avoid Property Initialization Order Dependency。
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
Run Code Online (Sandbox Code Playgroud)
诀窍在这里:privateParam1并privateParam2存储两个值。get 和 set 仅针对公开的属性实现,param1并且param2:get返回只是内部属性,并且在这set两个属性中都可以在没有分析器警告的情况下使用,因为它们被标记为Dependent.