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

Способы задать обратные вызовы

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

  • Указатель на функцию, который ссылается на функцию, чтобы выполниться.

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

  • Вектор символа, который оценивает к допустимому выражению 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.

Была ли эта тема полезной?