gpt4 book ai didi

functional-programming - 闭包的确切定义是什么?

转载 作者:行者123 更新时间:2023-12-03 13:42:10 26 4
gpt4 key购买 nike

我已经阅读了有关 stackflow 和其他来源的闭包的先前主题,但有一件事仍然让我感到困惑。从我已经能够从技术上拼凑起来,闭包只是一组包含函数代码和的值的数据。绑定(bind)变量在那个函数中。

换句话说,按照我的理解,从技术上讲,以下 C 函数应该是一个闭包:

int count()
{
static int x = 0;

return x++;
}

然而,我读到的所有内容似乎都暗示闭包必须以某种方式将函数作为第一类对象传递。此外,通常似乎暗示闭包不是过程编程的一部分。这是解决方案与其解决的问题过度相关的情况,还是我误解了确切的定义?

最佳答案

不,这不是关闭。您的示例只是一个返回递增静态变量结果的函数。

以下是闭包的工作方式:

function makeCounter( int x )
{
return int counter() {
return x++;
}
}

c = makeCounter( 3 );
printf( "%d" c() ); => 4
printf( "%d" c() ); => 5
d = makeCounter( 0 );
printf( "%d" d() ); => 1
printf( "%d" c() ); => 6

换句话说,对 makeCounter() 的不同调用会产生不同的函数,这些函数在它们已经“关闭”的词法环境中具有自己的变量绑定(bind)。

编辑:我认为这样的例子使闭包比定义更容易理解,但是如果你想要一个定义,我会说,“闭包是函数和环境的组合。环境包含函数中定义的变量以及那些在创建函数时对函数可见的变量。只要函数存在,这些变量就必须保持对函数可用。

关于functional-programming - 闭包的确切定义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1095707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com