1

在具有相关属性的类中c,我想c使用等于'a'or的第三个参数调用 setter 'b',选择要更改的独立属性以进行设置c

代码是

classdef test < handle
    properties
        a
        b
    end
    properties (Dependent = true)
        c
    end

    methods
        function c = get.c(obj)
            c = obj.a + obj.b;
        end

        function obj = set.c(obj, value, varargin)
            if(nargin == 2)
                obj.a = value - obj.b;
            end

            if(nargin == 3 && argin(3) == 'a') % how do I enter this loop?
                obj.a = value - obj.b;
            end

            if(nargin == 3 && argin(3) == 'b') % or this?
                obj.b = value - obj.a;
            end

        end
    end
end

此调用有效:

myobject.c = 5

但是如何使用等于'a'or的第三个参数调用 setter 'b'

4

1 回答 1

0

你不能。set总是只接受两个参数。您可以使用附加的依赖属性来解决它:

classdef test < handle

    properties
        a
        b
    end

    properties (Dependent = true)
        c
        d
    end

    methods
        function c = get.c(obj)
            c = obj.a + obj.b;
        end
        function d = get.d(obj)
            d = c;
        end

        function obj = set.c(obj, value)                
            obj.a = value - obj.b;
        end
        function obj = set.d(obj, value)                
            obj.b = value - obj.a;
        end

    end
end

或通过选择不同的语法和/或方法:

myObject.set_c(5,'a')  %// easiest; just use a function
myObject.c = {5, 'b'}  %// easy; error-checking will be the majority of the code
myObject.c('a') = 5    %// hard; override subsref/subsasgn; good luck with that

或其他有创意的东西:)

于 2012-10-04T06:34:42.393 回答