如何在MatLab中的静态方法中调用事件?

时间:2013-06-26 22:59:00

标签: matlab oop events static

我有一个静态的类,因此所有方法都是静态的。由于我正在尝试跟踪操作过程的位置,因此我尝试定期触发事件以更新UI。我的课看起来类似于以下内容:

classdef foo < handle

    events
       Update
    end
    methods(Static)
        function bar1()
            ...
            notify([], 'Update', EvtData(val));
        end
    end
end

问题是,当我运行代码并进入notify([]...行时,我收到以下错误:

  

未定义的命令/功能'notify'。

我假设这是一个事实,即这是一个静态方法被称为这样的事实:

foo.bar1()

如何在MatLab中的静态方法中触发/调用事件?

1 个答案:

答案 0 :(得分:2)

MATLAB OOP中的

Events与句柄对象相关联,句柄对象是触发事件的源(notify)。如果没有触发您有兴趣收听的事件的对象(addlistener),则无法注册事件处理程序。

根据课程在您的应用中的适用程度,您可以实施Singleton pattern

MyClass.m

classdef MyClass < handle
    events
        Update
    end

    %# private constructor
    methods (Access = private)
        function obj = MyClass()
        end
    end

    methods (Static)
        %# restrict instantiation of class to one object
        function obj = getInstance()
            persistent inst;
            if isempty(inst)
                inst = MyClass();
            end
            obj = inst;
        end

        %# register event listener
        function registerListener(f)
            persistent lh;
            if ~isempty(lh)
                delete(lh);
            end
            lh = addlistener(MyClass.getInstance(), 'Update', f);
        end

        %# some function that will trigger the event
        function func()
            notify(MyClass.getInstance(), 'Update')
        end
    end
end

MATLAB

>> MyClass.func
>> MyClass.registerListener(@(o,e)disp('updated'))
>> MyClass.func
updated
>> MyClass.func
updated