翻译自《Groovy in action》,如有不准确之处,希望指教!
closures(闭包)很重要,非常的重要!!!可以被认为是Groovy中一个非常有用的特性。同时,在你没有完全了解它之前会是一个陌生的概念。为了发挥Groovy最大功效,或者了解任何其他Groovy代码,它将肯定让你感觉轻松。不只是“一次婚礼上遇见它们”的轻松,而是“邀请它们参加周末烧烤”的轻松。(注原文: Not just
“met them once at a wedding” comfortable, but “invite them over for a barbecue on
the weekend” comfortable.)
此刻,我不是想吓跑你,closures(闭包)并不难---它只是不同于任何你过去习惯的事物。某种程度上,它是陌生的,因为在面向对象中一个首要的原则是对象拥有行为和数据。closures(闭包)是对象,在它的生命里最主要的目的是它们的行为---这几乎是他们的所有。
在这节我们将介绍closures(闭包)的基本概念,阐明它们的好处。然后,展示他们是怎样被定义和调用的。讨论基础之后,我们将更深入的探讨closures(闭包)中使用其他的方法和closures(闭包)的范围---即,它内部数据和成员的访问---以及,考虑closures(闭包)使用什么方法来返回。本节结尾,我们将讨论closures(闭包)怎样用于实现多数普通的设计模式和通过不同的解决方式来减轻另外某些需要。
因此,不再啰嗦,首先,让我们来看下实际中的closures(闭包)。
让我们以一个简单的closures(闭包)定义开始,然后,我们通过一个示例来扩展它。closures(闭包)作为一个对象包装在一个代码块中。closures(闭包)的作用就像一个方法,因为,它可以获取参数并能返回值。它是一个普通的对象,因为,你可以给他传递一个引用,就如你可以引用任何其他对象一样。别忘了,JVM不会知道你正在运行Groovy代码,因此,你可以使用一个closures(闭包)对象也就没有什么特别奇怪的了,它只是个对象。Groovy提供了一个非常简单的方法来创建closures(闭包)并赋予一些非常敏捷的行为。
假如,它能帮助你用类似于真实世界的方式来思考,假设,一个信封中的一张信纸,信纸上可能写着变量的值:“x=5, y=10”等等。对于closures(闭包)来说,信纸可能拥有一个指令列表,你可以把信封给某人,某人可能依照信纸上的指令来做决定,或者他可能同样把这个信封给其他人。每次根据不同的上下文,可能会按照信纸上面的指令来做决定很多次。例如:信纸上写着:”给你心里想着的人写一封信“,然后,他会在他的地址簿里寻找他心里想着的一系列的人,最后,根据上面的指令,一个一个的给他们写信。
closures(闭包)等同于上面真实生活的示例,可以表示成如下的形式:
Closure envelope = { person -> new Letter(person).send() }
addressBook.each (envelope)
这是一个比较冗长的方式来处理它,不是Groovy惯用的.但是,它展示了closures(闭包)它自己(在这种情况下,envelope 变量的值) 和它用处(作为each方法中的参数.)之前的区别 。当第一次看到closures(闭包)的简写形式是难于理解。Groovy使它们非常简洁,因为它们经常被使用---但是,简写不利于学习过程。为了对比,先前的代码采用Groovy提供的简写形式,它往往有利于清楚的区分冗长的形式:
addressBook.each { new Letter(it).send() }
分享到:
相关推荐
赠送jar包:groovy-all-2.4.5.jar; 赠送原API文档:groovy-all-2.4.5-javadoc.jar; 赠送源代码:groovy-all-2.4.5-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.5.pom; 包含翻译后的API文档:groovy-all...
赠送jar包:groovy-all-2.4.13.jar; 赠送原API文档:groovy-all-2.4.13-javadoc.jar; 赠送源代码:groovy-all-2.4.13-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.13.pom; 包含翻译后的API文档:groovy...
赠送jar包:groovy-all-2.4.5.jar; 赠送原API文档:groovy-all-2.4.5-javadoc.jar; 赠送源代码:groovy-all-2.4.5-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.5.pom; 包含翻译后的API文档:groovy-all...
groovy-2.0.8-with-eclipse-plugin-2.7.2.part3
groovy-2.0.8-with-eclipse-plugin-2.7.2.part1
赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...
groovy-2.0.8-with-eclipse-plugin-2.7.2.part2
在SDK中,"groovy-2.5.0-beta-2"目录下通常会包含以下关键组件: 1. **bin** 目录:包含可执行脚本,如`groovy`, `groovyc`, `groovysh`等,这些是Groovy的命令行工具,用于运行Groovy脚本、编译Groovy源码和启动...
标题“groovy-all”暗示这是一个包含Groovy完整实现的库,通常这样的库会包括Groovy的运行时环境和所有相关的类库。版本号“2.4.7”表明这是Groovy 2.4系列的一个稳定版本,发布于2016年,该版本可能包含了自2.4.0...
Groovy-2.4.0-beta-1.zip 是一个压缩包,其中包含了Groovy编程语言的一个特定版本,即2.4.0的测试版1。Groovy是一种动态、灵活的面向对象的脚本语言,它运行在Java平台上,并且与Java紧密集成。Groovy提供了简洁的...
赠送jar包:groovy-2.5.1.jar; 赠送原API文档:groovy-2.5.1-javadoc.jar; 赠送源代码:groovy-2.5.1-sources.jar; 赠送Maven依赖信息文件:groovy-2.5.1.pom; 包含翻译后的API文档:groovy-2.5.1-javadoc-API...
groovy-grails-tool-suite-3.6.4.RELEASE-e4.4.2-win32-x86_64.part2 共两个包,解压后需要将扩展名.zip.bak改名为.zip重新解压。 http://dist.springsource.com/release/STS/3.8.1.RELEASE/dist/ e4.6/spring-tool-...
赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...
总的来说,"groovy-xml-2.2.0-beta-1.zip" 和 "bb4-common.zip" 提供了两个不同但互补的工具集,前者专注于XML处理,后者提供了一套通用的Java和Scala代码库。这两个资源对于需要在Groovy环境中处理XML,同时利用...
1. **groovy-all.jar**:这是一个包含了Groovy库所有模块的集合,你可以通过引入这个单一的jar文件来快速地在项目中使用Groovy。 2. **bin**目录:包含了一系列可执行脚本,如`groovy`, `groovyc`, 和 `groovysh`,...
groovy-grails-tool-suite-3.6.4.RELEASE-e4.4.2-win32-x86_64.part1 共两个压缩包,解压后将扩展名.zip.bak改为.zip再次解压。
6. **jar文件**:如`groovy-4.0.3.jar`等,这些是SDK的核心库,包含Groovy运行时所需的类和接口。 7. **依赖库**:Groovy可能依赖于其他Java库,如Ant、JUnit等,这些依赖项通常也会包含在SDK中。 使用Groovy SDK...
标题 "groovy-console-2.2.0-rc-3.zip" 暗示这是一个Groovy Console的特定版本,Groovy是一种基于Java平台的动态编程语言,它扩展了Java的语法,提供了简洁、灵活和富有表现力的特性,使得编写脚本和应用程序更加...
标题中的“Groovy和Java相互调用1”指的是在编程时如何在Groovy语言环境中调用Java类,以及反之,如何在Java程序中调用Groovy类。这是一种跨语言交互的方式,特别是在混合使用Groovy和Java的项目中非常常见。 ...