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