<分区>
我理解闭包的广义概念(函数与定义它们时的环境快照一起存储),作为一等公民的函数意味着函数可以像闭包中的任何其他数据类型一样传递和返回语言。
有趣的是,我使用过的所有具有一等公民功能的语言,例如 Python、Javascript、Scheme 似乎也总是有闭包。
确实,向函数传递闭包和从函数返回闭包是将函数实现为语言一等公民的一种方式,但我不确定能够编写它们是否是函数成为一等公民的直接和不可避免的结果.
更具体地说:
您能否提供一个具有一流功能但不能编写闭包的语言的实际示例?
<分区>
我理解闭包的广义概念(函数与定义它们时的环境快照一起存储),作为一等公民的函数意味着函数可以像闭包中的任何其他数据类型一样传递和返回语言。
有趣的是,我使用过的所有具有一等公民功能的语言,例如 Python、Javascript、Scheme 似乎也总是有闭包。
确实,向函数传递闭包和从函数返回闭包是将函数实现为语言一等公民的一种方式,但我不确定能够编写它们是否是函数成为一等公民的直接和不可避免的结果.
更具体地说:
您能否提供一个具有一流功能但不能编写闭包的语言的实际示例?
最佳答案
这些语言是functions are first-class objects .
当一个函数定义在另一个函数内部时,嵌套函数称为高阶函数。
函数是一流的对象意味着函数与其他对象(例如数字、字符串、类等)没有区别。因此,您可以将它们作为参数传递或返回,就像任何其他对象一样其他对象,而不调用它们。例如在 Python 中,您可以通过省略括号直接返回函数本身而不调用它。
能够编写另一个包装函数可以返回的高阶函数正是 definition of a closure ,并且是将函数作为一流对象的结果。
因此,您的问题的答案是:是的,闭包是必要将函数作为一流对象,因为它们是那。更直接地说,您不能拥有一等函数,也不能编写闭包。
请注意,一些没有一流函数的语言(Pascal、Algol)有一种叫做 lexical closures 的闭包。 .但它们远没有实际的闭包强大。
关于javascript - 具有一流功能的语言是否一定允许闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27496419/