作为MATLAB的新手,我正在尝试编写一个类,其中,如果两个属性中的一个更改值,则会自动重新计算第三个属性。
似乎事件和听众都是为此而做的,但我无法掌握他们的基本实现。
我最近的尝试就是这个
% when property a or b is altered, c will automatically be recalculated
classdef myclass < handle
properties
a = 1;
b = 2;
c
end
events
valuechange
end
methods
function obj = myclass()
addlistener(obj,'valuechange', obj.calc_c(obj))
end
function set_a(obj, input)
obj.a = input;
notify(obj, valuechange)
end
function set_b(obj, input)
obj.b = input;
notify(obj, valuechange)
end
function calc_c(obj)
obj.c = obj.a + obj.b
end
end
end
返回以下错误
Error using myclass/calc_c
Too many output arguments.
Error in myclass (line 18)
addlistener(obj,'valuechange', obj.calc_c(obj))
我做错了什么?
答案 0 :(得分:1)
您是否要将c定义为Dependent,以便每次使用它时都确定它已更新?
像这样的东西
classdef myclass < handle
properties
a
b
end
properties (Dependent)
c
end
methods
function x = get.x(obj)
%Do something to get sure x is consistent
x = a + b;
end
end