函数和闭包之间有什么区别?

Fre*_*ddy 15 swift

我一直在阅读iBooks中的swift编程指南.有人可以向我解释函数和闭包之间的区别.它只是没有名称,可以在表达式中使用吗?

man*_*lds 11

首先,让我们从维基百科中的Closure定义开始:

在编程语言中,闭包(也是词法闭包或函数闭包)是函数的一个函数或引用,以及一个引用环境 - 一个存储对每个非局部变量(也称为自由变量或上值)的引用的表.那个功能.

闭包是用于引用函数及其"关闭"的环境变量的术语.

Swift中Closure的定义与其他语言(如C#和Ruby)中的lambda块一致.

至于与函数的区别,来自Swift文档:

函数中引入的全局函数和嵌套函数实际上是闭包的特例

因此,所有函数本质上都是闭包,用于在其上下文中存储对变量的引用.

Closure expressions 是编写闭包的便捷方式,并提供更简洁的语法.


jem*_*ons 10

事实上,函数只是命名闭包.以下至少在概念上是等效的:

let foo = { println("hello") }

func foo()->(){ println("hello") }
Run Code Online (Sandbox Code Playgroud)

这样会稍微使用的情况下更复杂func申报方法,因为有糖的一些有趣的位加入关于公共命名参数的自动插入等func myMethod(foo:Int, bar:Int, baz:Int)成为func myMethod(foo:Int, #bar:Int, #baz:Int),例如.

但是,即使方法只是闭包的一个特例,它仍然是正确的,如果闭包也是如此,那么函数和方法也是如此.