exponenta event banner

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

Способы определения обратных вызовов

Для использования свойств обратного вызова присвойте свойству код обратного вызова. Используйте одну из следующих методик:

  • Дескриптор функции, который ссылается на выполняемую функцию.

  • Массив ячеек, содержащий дескриптор функции и дополнительные аргументы

  • Символьный вектор, вычисляющий допустимое выражение MATLAB ®. MATLAB вычисляет вектор символов в базовой рабочей области .

Определение обратного вызова как символьного вектора не рекомендуется. Использование функции, указанной в качестве дескриптора функции, позволяет MATLAB предоставлять важную информацию для функции обратного вызова.

Дополнительные сведения см. в разделе Синтаксис функции обратного вызова.

Синтаксис функции обратного вызова

Функции обратного вызова графики должны принимать по крайней мере два входных аргумента:

  • Дескриптор объекта, обратный вызов которого выполняется. Используйте этот дескриптор в функции обратного вызова для ссылки на объект обратного вызова.

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

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

Например, определите функцию обратного вызова с именем lineCallback для линий, созданных plot функция. С помощью lineCallback на пути MATLAB используйте @ для назначения дескриптора функции ButtonDownFcn свойство каждой строки, созданной plot.

plot(x,y,'ButtonDownFcn',@lineCallback)

Определите обратный вызов, чтобы принять два входных аргумента. Используйте первый аргумент для ссылки на определенную линию, для которой выполняется обратный вызов. Используйте этот аргумент для установки строки Color свойство:

function lineCallback(src,~)
   src.Color = 'red';
end

Второй аргумент пуст для ButtonDownFcn обратный вызов. ~ символ указывает, что этот аргумент не используется.

Передача дополнительных входных аргументов

Чтобы определить дополнительные входные аргументы для функции обратного вызова, добавьте аргументы в определение функции, сохраняя правильный порядок аргументов по умолчанию и дополнительных аргументов:

function lineCallback(src,evt,arg1,arg2)
   src.Color = 'red';
   src.LineStyle = arg1;
   src.Marker = arg2;
end

Назначьте свойству массив ячеек, содержащий дескриптор функции и дополнительные аргументы:

plot(x,y,'ButtonDownFcn',{@lineCallback,'--','*'})

Для передачи дополнительных аргументов можно использовать анонимную функцию. Например:

plot(x,y,'ButtonDownFcn',...
    @(src,eventdata)lineCallback(src,eventdata,'--','*'))

Связанная информация

Сведения об использовании анонимных функций см. в разделе Анонимные функции.

Сведения об использовании методов классов в качестве обратных вызовов см. в разделе Методы классов для обратных вызовов графики.

Для получения информации о том, как MATLAB разрешает выполнение нескольких обратных вызовов, см. BusyAction и Interruptible свойства объектов, определяющих обратные вызовы.

Определение обратного вызова по умолчанию

Можно назначить обратный вызов свойству определенного объекта или определить обратный вызов по умолчанию для всех объектов этого типа.

Определение ButtonDownFcn для всех линейных объектов задайте значение по умолчанию на уровне корня.

  • Используйте groot для указания корневого уровня иерархии объектов.

  • Определите функцию обратного вызова, которая находится на пути MATLAB.

  • Назначить дескриптор функции, ссылающийся на эту функцию, defaultLineButtonDownFcn.

set(groot,'defaultLineButtonDownFcn',@lineCallback)

Значение по умолчанию остается назначенным для сеанса MATLAB. Назначение значений по умолчанию можно выполнить в startup.m файл.