看了下swift的文档关于闭包的这一节
看到本页文档前大半部分讲的其实是匿名函数作参数,这根本不是我一直理解的闭包啊。不明白为什么会把lambda
这样的概念称作闭包,让人很容易混淆。
附上wikipedia闭包的解释
闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。
闭包一词经常和匿名函数混淆。这可能是因为两者经常同时使用,但是它们是不同的概念。
各位咋看?
1
yuankui 2015-03-31 15:52:31 +08:00
我的理解
闭包=匿名函数+scope |
2
tabris17 2015-03-31 15:53:57 +08:00
带upval的匿名函数
|
3
justfly OP 我自己为啥觉得闭包和匿名函数一点关系也没有,就是俩独立的概念
|
4
luahou 2015-03-31 16:59:40 +08:00
应该是如一楼说的,关系到作用范围。
|
5
billlee 2015-03-31 17:03:55 +08:00
叫闭包的关键是它是 nested 的,能够引用外层的变量,当它被当作参数传递时,被引用的外层变量就是那个自由变量。
这和 javascript, python 里面是的 nested 函数是一样的,和 Java 里面的内部类也差不多,都是闭包的一种形式。 |
6
blacktulip 2015-03-31 17:05:48 +08:00
每次看到 closure 都会想起 banana, gorilla 和 jungle
|
7
justfly OP @billlee 关键是 这里函数作为参数并没有用到任何的自由变量
文档给的例子 : 一个sort函数,接收一个数组参数和一个函数参数,函数是`(Int, Int) -> bool`类,sort用它来判断哪个大,它没有用任何的外层自由变量,所以我认为这就不是闭包。 |