Выполнение обратного вызова

Выполнение коллбэков

Прослушиватели выполняют функцию обратного вызова, когда уведомляют, что событие произошло. Прослушиватели являются пассивными наблюдателями в том смысле, что ошибки в выполнении коллбэка прослушивателя не препятствуют выполнению других прослушивателей, реагирующих на то же событие, или выполнению функции, которая инициировала событие.

Выполнение функции обратного вызова продолжается до завершения функции. Если в функции обратного вызова возникает ошибка, выполнение останавливается и управление возвращается к вызывающей функции. Затем выполняются все оставшиеся функции обратного вызова прослушивателя.

Порядок выполнения прослушивателя

Порядок, в котором функции обратного вызова прослушивателей выполняются после запуска события, не определен. Однако все коллбэки прослушивателя выполняются синхронно с запуском события.

Область класса 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

Похожие темы