Обратные вызовы - это функции, которые выполняются при получении прослушивателем уведомления о событии. Передать дескриптор функции, ссылающийся на функцию обратного вызова addlistener или listener при создании прослушивателя.
Все функции обратного вызова должны принимать по крайней мере два аргумента:
Дескриптор объекта, который является источником события
Один event.EventData объект или объект, производный от event.EventData класс.
Для функции: functionName
lh = addlistener(eventSourceObj,'EventName',@functionName)Для обычного метода, вызываемого с объектом класса: obj.methodName
lh = addlistener(eventSourceObj,'EventName',@obj.methodName)Для статического метода:ClassName.methodName
lh = addlistener(eventSourceObj,'EventName',@ClassName.methodName)Для функции в пакете:PackageName.functionName
lh = addlistener(eventSourceObj,'EventName',@PackageName.functionName)Определите функцию обратного вызова для принятия необходимых аргументов:
function callbackFunction(src,evnt) ... end
Если аргументы источника события и данных события не используются, можно определить функцию для игнорирования этих входных данных:
function callbackFunction(~,~) ... end
Для метода:
function callbackMethod(obj,src,evnt) ... end
Чтобы передать аргументы в обратный вызов в дополнение к аргументам данных источника и событий, переданным MATLAB ®, используйте анонимную функцию. Анонимные функции могут использовать любые переменные, доступные в текущей рабочей области.
Ниже приведен синтаксис обычного метода. Входные аргументы (arg1,...argn) должен быть определен в контексте, в котором вы вызываете addlistener.
lh = addlistener(src,'EventName',@(src,evnt)obj.callbackMethod(src,evnt,arg1,...argn)Использовать varargin для определения функции обратного вызова.
function callbackMethod(src,evnt,varargin) arg1 = varargin{1}; ... argn = varargin{n}; ... end
Общие сведения об анонимных функциях см. в разделе Анонимные функции.
TestAnonyFcn класс показывает использование анонимной функции с дополнительным аргументом. Обратный вызов прослушивателя отображает входные аргументы, показывающие, как MATLAB вызывает метод обратного вызова.
classdef TestAnonyFcn < handle events Update end methods function obj = TestAnonyFcn t = datestr(now); addlistener(obj,'Update',@(src,evnt)obj.evntCb(src,evnt,t)); end function triggerEvnt(obj) notify(obj,'Update') end end methods (Access = private) function evntCb(~,~,evnt,varargin) disp(['Number of inputs: ',num2str(nargin)]) disp(evnt.EventName) disp(varargin{:}) end end end
Создайте объект и запустите событие, вызвав triggerEvt способ:
obj = TestAnonyFcn; obj.triggerEvnt;
Number of inputs: 4 Update 01-Jul-2008 17:19:36