Сравнение указателей на функции

Сравнение указателей, созданных из именованной функции

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

См. также

Похожие темы