我一直在阅读iBooks中的swift编程指南。有人可以向我解释一下函数和闭包之间的区别。它只是没有名称而且可以在表达式中使用吗?
答案 0 :(得分:8)
事实上,函数只是命名闭包。以下至少在概念上是等效的:
let foo = { println("hello") }
func foo()->(){ println("hello") }
在使用func
声明方法的情况下,这会变得有点复杂,因为在公共命名参数的自动插入等方面添加了一些有趣的糖,func myMethod(foo:Int, bar:Int, baz:Int)
变为{{} 1}},例如。
但是,即使方法只是闭包的一个特例,它仍然是正确的,如果闭包也是如此,那么函数和方法也是如此。
答案 1 :(得分:8)
首先,让我们从维基百科中的definition of Closure开始:
在编程语言中,闭包(也是词法闭包或函数 closure)是一个函数或函数的引用 引用环境 - 存储对每个引用的引用的表 非局部变量(也称为自由变量或上变量) 功能
闭包是一个术语,用于指代一个函数以及来自其环境的变量"关闭"。
Swift中Closure的定义与其他语言(如C#和Ruby)中的 lambdas 和 blocks 一致。
与功能的区别,来自Swift documentation:
实际上,函数中引入的全局函数和嵌套函数 特殊情况的封闭
因此,所有函数本质上都是闭包,用于在其上下文中存储对变量的引用。
Closure expressions
是编写闭包的便捷方式,并提供更简洁的语法。