MATLAB 中的匿名函数和函数句柄有什么区别?

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

我听到这两个术语,匿名函数函数句柄在 MATLAB 中用来指代类似

f = @(x) x.^2
的东西。但后来我也听说这些术语含义不同。这两个术语有何不同?

function matlab lambda anonymous-function handle
1个回答
0
投票

函数句柄是对函数的引用。例如,

@sin
是函数
sin
的句柄。这是一个可以像函数一样进行计算的变量,但也可以将其作为参数传递给另一个函数。例如:

integral(@sin, 0, 1)

这里我们将函数

sin
作为参数传递给
integral
。我们需要特殊的语法
@sin
来执行此操作,因为在 MATLAB 中
sin
本身与
sin()
相同,也就是说,我们调用不带参数的函数。

所以

f = @sin

使变量

f
引用函数
sin
f
是函数句柄。

匿名函数是没有名称的函数。这个概念在其他一些语言中称为“lambda 表达式”或“函数文字”。

@(x) x.^2
是一个匿名函数。我们不能像处理其他函数那样通过它的名称来引用它,所以我们只能通过它的句柄来引用它。所以这个表达式返回新创建的匿名函数的句柄。

因此,表达式

f = @(x) x.^2

两者都创建一个匿名函数,并使

f
成为引用该匿名函数的函数句柄。


注1

在 MATLAB 中,匿名函数也是一个闭包。也就是说,它捕获了定义它的环境。例如:

a = 5;
f = @(x) a * x.^2;

这里,

f
引用的匿名函数保存了调用该函数时将要计算的表达式
a * x.^2
,以及调用该匿名函数时变量
a
的定义。我们现在可以安全地删除变量
a
,并且仍然评估
f


注2

MATLAB 中的函数句柄引用的不是函数的特定实例,而是所有具有相同名称的重载函数。当调用句柄引用的函数时,将应用正常的重载决策。但是重载解析发生在创建函数句柄的上下文中,因此函数句柄可以引用一些私有函数,该函数在创建句柄时可见,但在计算它时不可见。


有关更多详细信息,请参阅有关 函数句柄匿名函数的 MATLAB 文档。

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