具有一流功能的语言是否必然允许关闭?

时间:2014-12-16 02:08:17

标签: javascript python functional-programming first-class-functions

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

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

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

提出更具体的条款:

你能提供一个具有一流功能的语言的实际示例,但可以编写闭包吗?

1 个答案:

答案 0 :(得分:3)

此类语言是functions are first-class objects

的语言

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

作为第一类对象的函数意味着函数与其他对象(例如数字,字符串,类等)没有区别。因此,您可以将它们作为参数传递,或者将它们返回,就像任何对象一样其他对象,没有调用它们。例如,在Python中,通过省略括号,可以在不调用函数的情况下返回函数。

能够编写另一个包装函数可以返回的高阶函数恰好是definition of a closure,并且是具有作为第一类对象的函数的结果

因此,您的问题的答案是:是的,闭包是必需,因为它们具有作为一等对象的功能,因为它们是由于那。更直接地说,你不具备一流的功能而且无法编写闭包

请注意,某些没有第一类函数的语言(Pascal,Algol)有一些名为lexical closures的闭包。但它们远没有实际封闭那么强大。