对多个属性MATLAB使用一组方法

我有几个使用基本相同的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使用一个集合函数? (请注意,错误功能使用属性名称作为字符串.)
>建议只使用一个设定功能吗?使用一组功能有什么可能的缺点?

最佳答案 唯一真正的方法是将公共代码提取到另一个函数,并从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
点赞