函数句柄和函数之间的区别

问题描述 投票:0回答:1

MATLAB中函数句柄和函数本身有什么区别?它是否像C / C ++中的函数指针和函数之间的区别?

matlab function
1个回答
0
投票

我不知道C / C ++,但在MATLAB中,函数是一个非匿名程序,它(可能)接受输入并且(可能)给出输出,并使用function关键字定义,例如:

function a = MySum(b)
    a = sum(b);
end

而函数句柄是一种匿名函数的快捷方式,即不能从该脚本外部调用。它是使用@语法创建的:

f=@(b)sum(b);

该函数保存为.m文件,函数名称为文件名,因此,使用上面的示例MySum.m。将此保存在您的路径上,并根据上述定义了匿名函数,这就是您调用它们的方式:

b = [1 2];
f=@(b)sum(b);
aFunction = MySum(b); % = 3
aAnon = f(b); % =3

如果我们现在在同一路径上有一个新脚本,如果我们不定义它,我们就不能使用匿名函数,请尝试:

b = [1 2];
aFunction = MySum(b); % = 3
aAnon = f(b); % gives error that f is undefined

如果在路径之外创建脚本,则函数本身也将失败:

b = [1 2];
aFunction = MySum(b); % gives error that MySum is undefined
aAnon = f(b); % gives error that f is undefined

函数句柄的使用有几个原因,其中两个最突出的是:在“伪装循环函数”中,例如arrayfunbsxfun,它们需要像arrayfun(@function,array)这样的语法,或者当使用例如nnz(rand(size(N)>M)时。脚本中经常使用某种功能组合,例如f = @(M,N)nnz(rand(size(N)>M),缩短序列:f(N,M)现在可以调用nnz(rand(size(N)>M)而不是Wolfie's comment

f之后,确实存在函数句柄的双重性质:它可以充当指针,即上例中的sum如何是指向函数nnz(rand(size(N)>M)的指针,但也可以是它自己的函数,就像组合一样函数f=@(b) b.^2 + 5*b + 1或类似多项式的东西:function MySine() x = 1:10; y = sin(x); plot(x,y) end


关于“可能”接受输入/输出的注意事项:

您可以将函数定义为

qazxswpoi

这是一个完全有效的函数,它不接受输入或输出参数。

© www.soinside.com 2019 - 2024. All rights reserved.