【发布时间】:2016-01-08 14:08:39
【问题描述】:
我想为函数 A = K * B 实现一个类,其中所有属性都是不相关的。但是,我想在其他属性之一更改时动态更改属性。
我从一个非常简单的课程开始,最终得到以下内容。是否有更简单或更强大的方法(例如软件模式,使用特殊的设置/获取方法等)在 MATLAB 中执行此操作? (MATLAB 在 setter 函数中给出了很多警告)
classdef AeqKxB
properties
A
B
K
Kstate
end
properties (Access = private)
i % i=0 during construnction, i=1 normal operation
ia % ia = 1 to trick the setter function of B
ib % ib = 1 to trick the setter function of A
end
methods
function obj = MyClass2(a, k, kstate) % Constructor
obj.i = 0; % Construction starts
obj.A = a;
obj.B = obj.A*k;
obj.K = k;
obj.Kstate = kstate;
obj.i = 1; % Construction complete, ready for normal operation
obj.ia = 0; % Do not trick Set.B function for now
obj.ib = 0; % Do not trick Set.A function for now
end
function obj = set.A(obj, a) % setter for A
if obj.i == 0 % During construnction use normal operation
obj.A = a;
elseif obj.i == 1 % After construction
if obj.ia == 0 && obj.ib == 0
obj.A = a;
obj.ia = 1; % Get ready to Trick Set.B function
obj.B = obj.A / obj.K;
obj.ia = 0; % Trick finished, return to original
elseif obj.ia == 0 && obj.ib == 1
% Tricked Set.A function
obj.A = a;
end
end
end
function obj = set.B(obj, b) % setter for B
if obj.i == 0 % During construnction use normal operation
obj.B = b;
elseif obj.i == 1 % After construction
if obj.ia == 0 && obj.ib == 0;
obj.B = b;
obj.ib = 1; % Get ready to Trick Set.A function
obj.A = obj.B * obj.K;
obj.ib = 0; % Trick finished, return to original
elseif obj.ia == 1 && obj.ib == 0;
% Tricked Set.B function
obj.B = b;
end
end
end
function obj = set.K(obj,k) % setter for K
if obj.i == 0
obj.K = k;
elseif obj.i == 1
if strcmp(obj.Kstate, 'FixB')
obj.K = k;
obj.A = obj.B * obj.K;
elseif strcmp(obj.Kstate, 'FixA')
obj.K = k;
obj.B = obj.A / obj.K;
end
end
end
function obj = set.Kstate(obj,kstate)
obj.Kstate = kstate;
end
end
end
【问题讨论】: