5

我理解闭包的广义概念(函数与定义时的环境快照一起存储),作为一等公民的函数意味着函数可以像语言中的任何其他数据类型一样被传递和返回。

有趣的是,我使用过的所有语言都具有一等公民的功能,例如 Python、Javascript、Scheme 似乎也总是有闭包。

实际上,在函数之间传递和返回闭包是实现函数作为语言的一等公民的一种方式,但我不确定能够编写它们是否是函数作为一等公民的直接和不可避免的结果。

更具体地说:

您能否提供一个具有一流功能但无法编写闭包的语言实际示例?

4

1 回答 1

3

这样的语言是函数是一等对象的语言。

当一个函数在另一个函数内部定义时,嵌套函数称为高阶函数

函数是一等对象意味着函数与数字、字符串、类等其他对象没有区别。因此,您可以将它们作为参数传递,或者像任何其他对象一样返回它们,而无需调用它们。例如,在 Python 中,您可以通过省略括号来返回函数本身而不调用它。

能够编写另一个包装函数可以返回的高阶函数正是闭包的定义,并且是将函数作为一等对象的结果。

因此,您的问题的答案是:是的,闭包是将函数作为一等对象的必要条件,因为它们是其结果。更直接地说,你不能拥有一流的功能,也不能写闭包

请注意,一些没有一流函数的语言(Pascal、Algol)有一种称为词法闭包的闭包。但它们远没有实际的闭包强大。

于 2014-12-16T02:34:11.773 回答