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

时间:2014-06-08 17:13:05

标签: swift

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

2 个答案:

答案 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是编写闭包的便捷方式,并提供更简洁的语法。

相关问题