Коллбэки являются функциями, которые выполняются, когда прослушиватель получает уведомление о событии. Передайте указатель на функцию, ссылающийся на функцию обратного вызова к handle.addlistener
или handle.listener
при создании прослушивателя.
Все функции обратного вызова должны принять по крайней мере два аргумента:
Указатель объекта, который является источником события
event.EventData
возразите или объект, который выведен из event.EventData
класс.
Для функции: functionName
lh = addlistener(eventSourceObj,'EventName',@functionName)
Для обычного метода, вызванного объектом класса: obj.methodName
lh = addlistener(eventSourceObj,'EventName',@obj.methodName)
Для статического method:ClassName.methodName
lh = addlistener(eventSourceObj,'EventName',@ClassName.methodName)
Для функции в package: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