2、闭包<o:p></o:p>
(1)概述<o:p></o:p>
l 闭包是一种传递执行代码块的强大方法。<o:p></o:p>
l 可以把闭包看作Java中的匿名内类,但是只有单一的(匿名)方法。<o:p></o:p>
l 闭包可以被用作循环的一种替代方法<o:p></o:p>
[1, 2, 3, 4].each { println(it) }<o:p></o:p>
l 使用闭包可以使异常处理和关闭资源变得更简单,具体例子请参看Groovy SQL<o:p></o:p>
(2)比较闭包和匿名内类<o:p></o:p>
l 不同于Java匿名内类,Groovy 支持“true closures”:状态可以被传递到闭包外部<o:p></o:p>
l 局部变量在闭包创建时可以被使用和修改;闭包中创建的任何变量可以作为局部变量,对外部可见<o:p></o:p>
l 看下面的例子:<o:p></o:p>
count = 0<o:p></o:p>
last = 0<o:p></o:p>
[1, 2, 3, 4].each { count += it; last = it } <o:p></o:p>
println("the sum is ${count} and the last item was ${last}")<o:p></o:p>
输出结果:the sum is 10 and the last item was 4<o:p></o:p>
(3)闭包是普通对象<o:p></o:p>
l 闭包是在需要时被传递和调用的对象<o:p></o:p>
l 因此可以象下面一样使用:<o:p></o:p>
c = { println("Hello ${it}") }<o:p></o:p>
c.call('James')<o:p></o:p>
c.call('Bob')<o:p></o:p>
l 闭包会被编译成扩展groovy.lang.Closure类的新类<o:p></o:p>
l 下面的省略写法是等价的<o:p></o:p>
c = { println("Hello ${it}") }<o:p></o:p>
c('James')<o:p></o:p>
c('Bob')<o:p></o:p>
(4)闭包的参数<o:p></o:p>
l 闭包可以有任意数目的参数<o:p></o:p>
l 缺省情况,闭包具有单个缺省参数:“it”<o:p></o:p>
l 你可以在闭包声明的开始部分指定参数列表<o:p></o:p>
c = { a, b, c | println("Hello ${a} ${b} ${c}") }<o:p></o:p>
c('cheese', 234, 'gromit')<o:p></o:p>
l 下面是另一个使用两个参数的有用例子,在《Groovy快速入门》已经讲过:<o:p></o:p>
value = [1, 2, 3].inject('counting: ') { str, item | str + item }<o:p></o:p>
assert value == "counting: 123"<o:p></o:p>
<o:p></o:p>
value = [1, 2, 3].inject(0) { count, item | count + item }<o:p></o:p>
assert value == 6<o:p></o:p>
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=110282
相关推荐
### Groovy用户指南知识点解析 #### 一、Groovy与Java类定义的相似性与差异 **相似性:** - Groovy的类定义语法与Java非常相似,支持类方法(static)和实例方法。 - 类成员可以有public、protected、private访问...
### Groovy用户指南知识点解析 #### 一、Groovy简介 Groovy是一种灵活的面向对象编程语言,它为Java平台提供了强大的脚本能力,并且能够与现有的Java代码无缝集成。Groovy不仅支持传统的面向对象编程特性,还支持...
### Groovy 入门指南知识点解析 #### 一、Groovy与Grails简介 - **Groovy**: 是一种运行在Java平台上的灵活的面向对象编程语言。Groovy的设计旨在提高开发者的生产力,它具备简洁的语法,同时兼容现有的Java代码和...
2. **groovy用户指南.doc** - 这个指南可能是更深入的学习资源,涵盖了Groovy的高级特性。这可能包括闭包(Closure)的使用,元编程(Metaprogramming)的概念,GroovyShell和GroovyConsole的使用,以及如何利用...
在 `grails-app/domain` 创建 `User.groovy` 文件定义用户类,然后在 `grails-app/controllers/UserController.groovy` 编写控制器,处理用户的注册、登录等操作。在 `grails-app/views/user` 下创建相应的 GSP 页面...
总结,"Grails-开源框架---使用指南.pdf"和"Groovy入门经典(中文).pdf"这两本书将帮助读者深入理解Grails框架和Groovy语言,从而更好地开发基于JVM的现代Web应用程序。通过学习这两本书,开发者可以掌握如何利用...
- **模块**:介绍如何使用Groovy的各种模块,如用户指南、高级用法指南等。 - **FAQ**:常见问题解答部分涵盖了开发者可能遇到的问题及其解决方案。 - **测试指南**:详细介绍如何使用Groovy进行单元测试、集成测试...
- `docs`:文档,包括API参考和用户指南,帮助开发者了解Groovy的特性和用法。 - `lib`:库文件,包含Groovy运行时环境所需的JAR文件,可能包括核心库、标准库和其他依赖项。 - `src`:源代码,开发者可以查看Groovy...
2. **docs** 目录:存放Groovy的API文档和用户指南,提供了详细的语言参考和示例,对学习和使用Groovy很有帮助。 3. **lib** 目录:包含了Groovy运行时所需的JAR文件,包括Groovy核心库、标准库以及与其他库(如Ant...
- **文档**:可能包括API文档、用户指南和开发者参考,帮助开发者了解和使用该版本的Groovy。 - **示例代码**:可能包含一些示例脚本来展示Groovy的特性和用法。 - **源代码**:虽然名为“binary”,但有时也会包含...
- **docs**:可能有API文档和用户指南。 - **src**:可能包含Groovy源码,供开发者参考学习。 - **conf**:可能包含配置文件,如Groovy的类路径设置。 - **examples**:可能包含示例代码,帮助用户快速上手。 使用...
- **内容:** 列出了 Groovy 社区的各种资源,包括邮件列表、用户组等。 - **适用场景:** 寻求帮助或参与 Groovy 社区。 13. **示例代码 (Cookbook Examples)** - **内容:** 包含了一系列实际应用场景中的 ...
### Groovy DSL:基于领域的特定语言开发指南 #### Groovy简介 Groovy是一种基于Java平台的灵活、强大的脚本语言,它与Java高度兼容,能够直接调用Java库中的类和方法,反之亦然。这种无缝集成使得Groovy成为一种极...
文档通常包括API参考、用户指南、教程以及开发者信息,这些都是理解和学习Groovy的关键资源。以下是一些关于Groovy 1.8.9的知识点: 1. **动态类型**:Groovy支持静态和动态类型,动态类型使得代码更简洁,编写速度...
- 文档:包括API文档和用户指南,帮助开发者了解和使用Groovy。 - 示例代码:展示Groovy的基本用法和特性。 通过解压"groovy-binary-1.8.9.zip",你可以安装并配置Groovy环境,然后利用这个强大的语言进行开发。...
5. **文档和示例**:SDK通常会包含一份详尽的用户指南、API文档和教程,帮助新用户快速上手。这些文档会解释Groovy的基本语法、特性以及如何与其他Java技术(如Spring框架)集成。 6. **源代码**:对于开发者来说,...
5. **groovy用户指南**:这份文档可能是一个详细的用户手册,包含了Groovy的安装步骤、环境配置、开发工具的选择和使用,以及日常开发中可能遇到的问题和解决方案。 6. **wiki-snapshot.pdf**:这可能是一个Groovy...
9. **启动指南**:`start step by step.txt`和`roadmap.txt`可能是项目启动和进阶教程,指导用户逐步搭建和扩展Webx应用。 10. **库和资源**:`lib2`目录可能包含了框架所需的第三方库,而`src`目录则包含了框架的...
这本用户指南还并不完善, 就像 Gradle 一样还在开发当中. 在这本指南中, Gradle 的一些功能并没有被完整的展示出来. 一些内容的解释也并不是十分的清楚, 或者假设关于 Gradle 你知道得更多. 我们需要你的帮助来完善...