Можно создать указатели на функцию для именованных и анонимных функций. Можно хранить несколько указатели на функцию в массиве, а также сохранять и загружать их, как и любую другую переменную.
Указатель на функцию является MATLAB® тип данных, который хранит ассоциацию с функцией. Косвенный вызов функции позволяет вам вызвать функцию независимо от того, откуда она вызывается. Типичное использование указателей на функцию включает:
Передача функции другой функции (часто называемой функциями функции). Для примера передачи функции в интеграцию и оптимизационные функции, такие как integral
и fzero
.
Установка функций обратного вызова (для примера, коллбэк, который реагирует на событие пользовательского интерфейса или взаимодействует с оборудованием сбора данных).
Построение указателей на функции, определенные в строке, а не сохраненные в программном файле (анонимные функции).
Вызов локальных функций из-за пределов основной функции.
Можно увидеть, является ли переменная, h
, является указателем на функцию, использующим isa
(h,'function_handle')
.
Чтобы создать указатель для функции, предварите имя функции с @
знак. Например, если у вас есть функция, вызываемая myfunction
, создайте указатель с именем f
следующим образом:
f = @myfunction;
Вы вызываете функцию с помощью указателя так же, как вы вызываете функцию непосредственно. Например, предположим, что у вас есть функция с именем computeSquare
, определяемый как:
function y = computeSquare(x) y = x.^2; end
Создайте указатель и вызовите функцию, чтобы вычислить квадрат четырех.
f = @computeSquare; a = 4; b = f(a)
b = 16
Если функция не требует никаких входов, то можно вызвать функцию с пустыми круглыми скобками, такими как
h = @ones; a = h()
a = 1
Без круглых скобок назначение создает другой указатель на функцию.
a = h
a = @ones
Указатели на функцию являются переменными, которые можно передать другим функциям. Для примера вычислите интеграл x2 в области значений [0,1].
q = integral(f,0,1);
Указатели на функцию хранят их абсолютный путь, поэтому, когда у вас есть допустимый указатель, можно вызвать функцию из любого места. Вы не должны указывать путь к функции при создании указателя, только имя функции.
При создании указателей на функции следует учитывать следующее:
Длина имени - Каждая часть имени функции (включая имена пакета и класса) должна быть меньше номера, заданного в namelengthmax
. В противном случае MATLAB обрезает последнюю часть имени.
Возможности - функция должна находиться в возможности во время создания указателя. Поэтому функция должна быть в пути MATLAB или в текущей папке. Или, для указателей на локальные или вложенные функции, функция должна быть в текущем файле.
Приоритет - когда существует несколько функций с одним и тем же именем, MATLAB использует те же правила приоритета, чтобы задать указатели на функцию, что и для вызова функций. Для получения дополнительной информации смотрите Порядок приоритета функций.
Перегрузка - когда указатель на функцию вызывается с одним или несколькими аргументами, MATLAB определяет доминирующий аргумент. Если доминирующий аргумент является объектом, MATLAB определяет, имеет ли класс объекта метод, который перегружает то же имя, что и связанная функция указателя на функцию. Если это так, то вместо связанной функции вызывается метод объекта.
Можно создавать указатели на анонимные функции. Анонимная функция является функцией MATLAB, основанной на однострочном выражении, которая не требует программного файла. Создайте указатель на анонимную функцию путем определения тела функции, anonymous_function
и список , разделенный запятыми входных параметров к анонимной функции, arglist
. Синтаксис:
h = @(arglist)anonymous_function
Например, создайте указатель, sqr
, к анонимной функции, которая вычисляет квадрат числа и вызывает анонимную функцию с помощью ее указателя.
sqr = @(n) n.^2; x = sqr(3)
x = 9
Для получения дополнительной информации см. «Анонимные функции».
Можно создать массив указателей на функцию, собрав их в камеру или массив структур. Для примера используйте массив ячеек:
C = {@sin, @cos, @tan}; C{2}(pi)
ans = -1
Или используйте массив структур:
S.a = @sin; S.b = @cos; S.c = @tan; S.a(pi/2)
ans = 1
Можно сохранять и функцию load указатели в MATLAB, так же как и любую другую переменную. Другими словами, используйте save
и load
функций. Если вы сохраняете указатель на функцию, MATLAB не сохраняет информацию о пути. Если вы загружаете указатель на функцию, и файл функции больше не существует в пути, указатель недопустим. Недопустимый указатель возникает, если расположение файла или имя файла изменилось с момента создания указателя. Если указатель недопустим, MATLAB может отобразить предупреждение при загрузке файла. При вызове недопустимого указателя MATLAB выдает ошибку.
func2str
| function_handle
| functions
| isa
| str2func