1

作为 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)) 

我究竟做错了什么?

4

1 回答 1

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
于 2013-01-16T13:32:07.933 回答