MATLAB 嵌套事件通知?

标签 matlab event-listener

MATLAB 句柄似乎不会同时响应来自同一源的多个通知。不幸的是这对我来说是一个大问题。这是我正在讨论的示例:

classdef testClass < handle
    events
        testevent
    end

    methods
        function obj = testClass
            obj.addlistener('testevent', @obj.respond);
        end
        function raise(obj)
            obj.notify('testevent');
        end
        function respond(obj, varargin)
            fprintf('Responded!\n');
            obj.raise();
        end
    end

end

当我执行代码时

c = testClass;
c.raise();

结果是

Responded!

但我真的希望递归能够工作,尽管显然在这个简单的例子中它会无限递归。有什么办法可以实现这种行为吗?

最佳答案

您可以通过将监听器句柄的 Recursive 属性设置为 true 来使监听器递归。 Listener handle properties are in the event.listener help page 。您只需为 obj.addlistener 指定一个输出参数即可检索句柄。

这是我用来让它工作的代码:

classdef testClass < handle
    events
        testevent
    end

    methods
        function obj = testClass
            lh = obj.addlistener('testevent', @obj.respond);
            lh.Recursive = true;
        end
        function raise(obj)
            notify(obj,'testevent');
        end
        function respond(obj, varargin)
            fprintf('Responded!\n');
            obj.raise();
        end
    end
end

另请注意,默认递归限制为 500 次调用,因此代码不会无限递归;使用 set(0, 'RecursionLimit', N) 来更改它。我认为设置 N=inf 是一个坏主意。

关于MATLAB 嵌套事件通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7409238/

相关文章:

matlab - 如何在 MATLAB 中提取指定边界内的部分图像

javascript - 通过点击移除 DOM 元素

Javascript 代码直到第二次点击 html 按钮才会触发?

javascript - 无法取消绑定(bind)事件监听器 - turbolinks 缓存有问题

string - 如何从matlab中的字符串中获取数字

user-interface - 在 GUI 的子图中添加滚动条

javascript - 如何使用事件监听器单击函数来使用 javascript 显示和隐藏数组中的图像

javascript - 删除 javascript 事件监听器

c - MexFile 导致 "Assertion detected"错误 - mexfiles 中的 memcpy 有问题吗?

c++ - 使用特征库再现张量矩阵