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

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

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

Смотрите также

Похожие темы