Прослушиватели выполняют функцию обратного вызова, когда уведомляют, что событие произошло. Прослушиватели являются пассивными наблюдателями в том смысле, что ошибки в выполнении коллбэка прослушивателя не препятствуют выполнению других прослушивателей, реагирующих на то же событие, или выполнению функции, которая инициировала событие.
Выполнение функции обратного вызова продолжается до завершения функции. Если в функции обратного вызова возникает ошибка, выполнение останавливается и управление возвращается к вызывающей функции. Затем выполняются все оставшиеся функции обратного вызова прослушивателя.
Порядок, в котором функции обратного вызова прослушивателей выполняются после запуска события, не определен. Однако все коллбэки прослушивателя выполняются синхронно с запуском события.
Область класса Handle notify
метод вызывает все прослушиватели перед возвращением выполнения к функции, которая вызвала notify
.
notify
Не изменяйте и не повторно используйте, не копируйте и не используйте объект данных о событиях, которому вы передаете notify
, который затем передается в обратный коллбэк прослушивателя.
Коллбэки прослушивателя могут вызываться notify
для запуска событий, включая то же событие, которое вызвало коллбэк. Когда вызывается функция notify
, MATLAB® устанавливает значения свойств объекта данных о событиях, который передается в функции обратного вызова. Чтобы гарантировать, что эти свойства имеют соответствующие значения для впоследствии называемых коллбэков, всегда создайте новый объект данных о событиях, если вы вызываете notify
с пользовательскими данными о событиях.
Если вы хотите контролировать, как ваша программа реагирует на ошибки, используйте try/catch
оператор в функции обратного вызова прослушивателя для обработки ошибок.
Когда вы создаете указатель на функцию внутри метода класса, контекст метода определяет контекст, в котором выполняется функция. Этот контекст предоставляет функции доступ к частным и защищенным методам, которые доступны для этого класса.
Для примера, UpdateEvt
класс задает событие с именем Update
и прослушиватель этого события. Прослушиватель коллбэка является частным методом evtCb
.
classdef UpdateEvt < handle events Update end methods function obj = UpdateEvt addlistener(obj,'Update',@evtCb); end end methods (Access = private) function obj = evtCb(obj,varargin) disp('Updated Event Triggered') end end end
Частные методы обычно доступны только классами. Однако, поскольку указатель на функцию создается в методе класса, notify
может выполнить коллбэк из вне класса:
a = UpdateEvt;
a.notify('Update')
Updated Event Triggered