Коллбэки - это функции, которые выполняются, когда прослушиватель получает уведомление о событии. Передайте указатель на функцию, ссылающуюся на функцию обратного вызова 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
Общие сведения об анонимной функции см. в разделе Анонимные функции.
The 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