比较函数句柄

比较根据命名函数构造的句柄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