Вызов сеттера с дополнительным аргументом? - 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
или что-то еще креативное:)