1

従属プロパティを持つクラスで、orに等しい 3 番目の引数を使用して のセッターを呼び出し、設定するために変更する独立したプロパティを選択し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'しかし、3 番目のパラメーターがorに等しいセッターを呼び出すにはどうすればよい'b'でしょうか。

4

1 に答える 1

0

できません。set常に2つの引数のみを受け入れます。追加の依存プロパティを使用して回避できます。

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 に答える