Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 对多个属性使用一套方法_Matlab_Class_Oop_Setter - Fatal编程技术网

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
    方法,但将主体放在一个单独的函数中(例如,同一类中的一个静态方法),以减少样板文件。如果这不清楚,我可以发布一个例子。。。