Можно создать указатели на функцию к именованным и анонимным функциям. Можно сохранить несколько указателей на функцию в массиве, и сохранить и загрузить их, когда вы были бы любая другая переменная.
Указатель на функцию является типом данных MATLAB®, который хранит ассоциацию к функции. Косвенно вызывание функции позволяет вам вызвать функцию независимо от того, откуда вы вызываете его. Типичное использование указателей на функцию включает:
Передача функции к другой функции (часто названный функциональными функциями). Например, передавая функцию интегрированию и оптимизационным функциям, таким как integral
и fzero
.
Задавая функции обратного вызова (например, коллбэк, который отвечает на событие UI или взаимодействует с оборудованием сбора данных).
Построение указателей на функции, определяемые встраивает вместо сохраненного в программном файле (анонимные функции).
Вызывание локальных функций снаружи основной функции.
Вы видите если переменная, 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
Указатели на функцию являются переменными, которые можно передать другим функциям. Например, вычислите интеграл x 2 на области значений [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