我对Groovy 文档中使用的术语"闭包"感到困惑.根据文档,他们对闭包的定义看起来更像是匿名函数或lambda.
我理解支持第一类函数的语言通常允许形成闭包.但是,这两个概念之间存在差异.
例如,根据Groovy文档:
Groovy中的闭包是一个匿名的代码块,可以接受参数,返回值,引用和使用在其周围范围内声明的变量.
在函数式语言中,这样的匿名代码块通常可以称为匿名lambda表达式,或者带有未绑定变量的lambda表达式,或者如果它不包含对未绑定变量的引用(如前面示例中的阈值),则称为闭合lambda表达式.Groovy没有这样的区别.
然后根据关闭的Wikipedia页面:
术语闭包通常被错误地用于表示匿名函数.
我错过了什么?
tim*_*tes 12
正如它在groovy文档中链接到同一页面的下一段所述:
严格来说,无法定义闭包.您可以定义引用局部变量或字段/属性的代码块,但只有当您将此代码块"绑定"(赋予其含义)变量时,它才会成为闭包.闭包是一个语义概念,就像一个实例,你无法定义,只需创建.严格地说,如果绑定了所有自由变量,则闭包只是一个闭包.除非发生这种情况,否则它只是部分关闭,因此不是真正的封闭.由于Groovy没有提供定义封闭的lambda函数的方法,并且代码块可能根本不是一个封闭的lambda函数(因为它有自由变量),我们将它们都称为闭包 - 即使是语法概念.我们将它称为语法概念,因为定义和创建实例的代码是一个,没有区别.我们非常清楚这个术语或多或少是错误的,但是当用一种不"知道"差异的语言来讨论代码时,它简化了许多事情.
| 归档时间: |
|
| 查看次数: |
1201 次 |
| 最近记录: |