Вызов сеттера с дополнительным аргументом? - MATLAB

В классе с зависимым свойством cЯ хотел бы позвонить cсеттер с третьим аргументом, равным 'a' или же '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' или же 'b'?

1 ответ

Ты не можешь 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

или что-то еще креативное:)

Другие вопросы по тегам