Можно создать указатели на функцию к именованным и анонимным функциям. Можно сохранить несколько указателей на функцию в массиве, и сохранить и загрузить их, когда вы были бы любая другая переменная.
Указатель на функцию является типом данных 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
Указатели на функцию являются переменными, которые можно передать другим функциям. Например, вычислите интеграл 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, когда вы были бы любая другая переменная. Другими словами, используйте функции load
и save
. Если вы сохраняете указатель на функцию, MATLAB не сохраняет информацию пути. Если вы загружаете указатель на функцию, и функциональный файл больше не существует на пути, указатель недопустим. Недопустимый указатель происходит, если расположение файла или имя файла изменились, поскольку вы создали указатель. Если указатель недопустим, MATLAB может отобразить предупреждение, когда вы загружаете файл. Когда вы вызываете недопустимый указатель, MATLAB выдает ошибку.
func2str
| функции
| isa
| str2func