ily*_* n. 3 lambda closures functional-programming anonymous-function grand-central-dispatch
据我所知,结合主流语言中的他人知识
有闭包和匿名功能.普通的C/C++没有这些.
这些语言中的闭包具有相同的语义吗?它们对日常编程有多重要?
一些背景:我一直在阅读针对Apple的Grand Central Dispatch的Objective C 的新增内容,并且我认为我应该了解是否真的只有一种或者不同的方式将类似块的结构引入该语言.
请澄清你的问题:你的工作意味着什么?您如何使用它们,何时使用它们或如何在内部实施它们?
编译.NET语言(VB/C#)的过程可以向您展示如何通常表示闭包:
闭包被转换为一个匿名类,其中包含封闭变量的字段.访问闭包的函数指针(委托)只不过是匿名类实现的特殊方法的指针.
关于闭包重要性的一些注意事项:
.NET:没有明确使用闭包.匿名函数有时用于事件和数据的功能表示.主要用途是LINQ查询的(内部)表示.
Python:对匿名函数的支持不足 - 只有lambda vars: expr- 语法.
Javascript:整个函数语法只不过是匿名函数和闭包的语法糖!
function f(x) { return x + 1; }
Run Code Online (Sandbox Code Playgroud)
等于
var f = function(x) { return x + 1; }
Run Code Online (Sandbox Code Playgroud)Ruby:大量使用闭包:大多数程序流结构依赖于它们.看到
array.each do |x|
   # code
end
Run Code Online (Sandbox Code Playgroud)
只是一个array#each函数的调用,一个匿名函数被执行(块)作为参数传递.在C#中表示:
Array.Each(x => {
    // Code
})
Run Code Online (Sandbox Code Playgroud)通常,闭包是这样的:
# 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除外 - 您有匿名类,而不是函数!)都允许这样的事情.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1910 次  |  
        
|   最近记录:  |