不同的编程语言如何使用闭包?

ily*_* n. 3 lambda closures functional-programming anonymous-function grand-central-dispatch

据我所知,结合主流语言中的他人知识

  • 目标C.
  • C#
  • VB.net
  • Java的
  • 蟒蛇
  • 红宝石
  • 使用Javascript
  • 口齿不清
  • Perl的

有闭包和匿名功能.普通的C/C++没有这些.

这些语言中的闭包具有相同的语义吗?它们对日常编程有多重要?

一些背景:我一直在阅读针对Apple的Grand Central Dispatch的Objective C 的新增内容,并且我认为我应该了解是否真的只有一种或者不同的方式将类似块的结构引入该语言.

Dar*_*rio 5

请澄清你的问题:你的工作意味着什么?您如何使用它们,何时使用它们或如何在内部实施它们?

编译.NET语言(VB/C#)的过程可以向您展示如何通常表示闭包:

闭包被转换为一个匿名类,其中包含封闭变量的字段.访问闭包的函数指针(委托)只不过是匿名类实现的特殊方法的指针.

关于闭包重要性的一些注意事项:

通常,闭包是这样的:

# Enclose `i` - Return function pointer
def counter():
    i = 0
    def incr():
        i += 1
        print(i)
    return incr

c = counter()
c() # -> 1
c() # -> 2
c() # -> 3
Run Code Online (Sandbox Code Playgroud)

您枚举的所有语言(Java除外 - 您有匿名类,而不是函数!)都允许这样的事情.