看了下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用它来判断哪个大,它没有用任何的外层自由变量,所以我认为这就不是闭包。 |