MATLAB ® считает, что дескрипторы функций, созданные из той же самой именованной функции, равны. Функция isequal возвращает значение true при сравнении этих типов ручек.
fun1 = @sin; fun2 = @sin; isequal(fun1,fun2)
ans = logical 1
Если сохранить эти дескрипторы в MAT-файл, а затем загрузить их обратно в рабочую область, они остаются равными.
В отличие от дескрипторов именованных функций, дескрипторы функций, представляющие одну и ту же анонимную функцию, не равны. Они считаются неравными, поскольку MATLAB не может гарантировать, что замороженные значения переменных, не являющихся аргументами, одинаковы. Например, в этом случае A является переменной без аргумента.
A = 5; h1 = @(x)A * x.^2; h2 = @(x)A * x.^2; isequal(h1,h2)
ans = logical 0
При создании копии дескриптора анонимной функции копия и оригинал равны.
h1 = @(x)A * x.^2; h2 = h1; isequal(h1,h2)
ans = logical 1
MATLAB считает, что дескрипторы функций для той же вложенной функции равны только в том случае, если код создает эти дескрипторы для того же вызова функции, содержащей вложенную функцию. Эта функция создает два дескриптора для одной вложенной функции.
function [h1,h2] = test_eq(a,b,c) h1 = @findZ; h2 = @findZ; function z = findZ z = a.^3 + b.^2 + c'; end end
Дескрипторы функций, созданные из той же вложенной функции и при том же вызове родительской функции, считаются равными.
[h1,h2] = test_eq(4,19,-7); isequal(h1,h2)
ans = logical 1
Дескрипторы функций, созданные из различных вызовов, не считаются равными.
[q1,q2] = test_eq(4,19,-7); isequal(h1,q1)
ans = logical 0