Matlab 对多个属性使用一套方法
我有几个属性使用基本相同的Matlab 对多个属性使用一套方法,matlab,class,oop,setter,Matlab,Class,Oop,Setter,我有几个属性使用基本相同的set方法: classdef MyClass properties A B end methods function mc = MyClass(a,b) % Constructor mc.A = a; mc.B = b; end function mc = set.A(mc, a) % setter for
set
方法:
classdef MyClass
properties
A
B
end
methods
function mc = MyClass(a,b) % Constructor
mc.A = a;
mc.B = b;
end
function mc = set.A(mc, a) % setter for A
if a > 5
mc.A = a;
else
error('A should be larger than 5');
end
end
function mc = set.B(mc, b) %setter for B
if b > 5
mc.B = b;
else
error('B should be larger than 5');
end
end
end
end
a
和B
,是否有办法只使用一个set
函数?(请注意,error
函数将属性名称用作字符串。)set
功能?使用一个set
功能可能有哪些缺点唯一真正的方法是将公共代码提取到另一个函数,并从setter调用它:
classdef MyClass
properties
A
B
end%public properties
methods
function mc = MyClass(a,b) % Constructor
mc.A = a;
mc.B = b;
end
function mc = set.A(mc, value) % setter for A
mc = mc.commonSetter(value, 'A');
end
function mc = set.B(mc, value) %setter for B
mc = mc.commonSetter(value, 'B');
end
end%public methods
methods(protected = true)
function mc = commonSetter(mc, property, value)
if value <= 5;
error([property ' should be less than 5');
end
mc.(property) = value;
end%commonSetter()
end%protected methods
end%classdef
classdef MyClass
性质
A.
B
公共属性的结束%
方法
函数mc=MyClass(a,b)%Constructor
mc.A=A;
mc.B=B;
结束
函数mc=set.A(mc,值)%A的设置器
mc=mc.commonSetter(值'A');
结束
函数mc=set.B(mc,值)%B的设置器
mc=mc.commonSetter(值'B');
结束
结束%public方法
方法(protected=true)
函数mc=commonSetter(mc,属性,值)
如果我不是MATLAB的OOP专家,但这似乎是不可行的。你可以创建一个他们都调用的助手方法来减少复制+粘贴。谢谢@excaza。你能详细介绍一下helper方法吗?也许是一个链接?@BarisErkus我同意,正如@excaza所说的,这在MatlabOOP中是不可能实现的。我认为他的建议只是使用多个set
方法,但将主体放在一个单独的函数中(例如,同一类中的一个静态方法),以减少样板文件。如果这不清楚,我可以发布一个例子。。。