exponenta event banner

Создать дескриптор функции

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

Что такое дескриптор функции?

Дескриптор функции - это тип данных 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 выдает ошибку.

См. также

| | | |

Связанные примеры

Подробнее