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

Когда обратные вызовы выполняются

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

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

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

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

Класс Handle handle.notify вызовы метода все прослушиватели перед возвращающимся выполнением к функции, который названный notify.

Обратные вызовы, Которые уведомляет Вызов

Не изменяйте и повторное использование или копия и снова используйте объект данных о событиях, что вы передаете notify, который затем передается коллбэку прослушивателя.

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

Управление ошибок обратного вызова

Если вы хотите управлять, как ваша программа отвечает на ошибки, используйте try/catch оператор в вашей функции обратного вызова прослушивателя, чтобы обработать ошибки.

Вызов Functions from Function Handles

Когда вы создаете указатель на функцию в методе класса, контекст метода определяет контекст, в котором выполняется функция. Этот контекст предоставляет функциональный доступ к закрытым и защищенным методам, которые доступны для того класса.

Например, 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

Похожие темы