函数指针、闭包和Lambda

89

我现在正在学习函数指针。当我阅读K&R关于这个主题的章节时,第一件让我印象深刻的是,“嘿,这有点像闭包。”但我知道这种假设在根本上是错误的,经过在线搜索后,我并没有找到真正比较这两者的分析。

那么为什么C风格的函数指针与闭包或lambda表达式有根本性的不同呢?据我所知,这与函数指针仍然指向已定义(命名)的函数有关,而不是匿名定义函数的实践。

为什么在第二种情况下将一个函数传递给另一个函数被视为更强大,其中它是未命名的,而在第一种情况下只是普通的、日常的函数被传递了呢?

请告诉我我为什么错误地如此密切地将这两者进行比较。

12个回答

1
大多数回答表明闭包需要函数指针,可能是匿名函数,但正如Mark写道,具名函数也可以存在闭包。以下是Perl的一个示例:
{
    my $count;
    sub increment { return $count++ }
}

闭包是定义$count变量的环境。它仅对increment子例程可用,并在调用之间保持存在。


0
大问题是:闭包和/或lambda在幕后是什么?它如何成为闭包和/或lambda,甚至更多,委托?非常可能的答案是,它们变成了一种汇编代码的函数指针,因此,闭包、委托、lambda、匿名函数本质上是一种声明/定义高级方式中的函数指针的语法糖,但这些声明包括一些机制来定义一些作用域到环境变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接