本代码示例为官方网站上示例
def a = 'coffee'
def c = {
def b = 'tea'
a + ' and ' + b
}
assert c() == 'coffee and tea'
def c
try{
def a = 'sugar'
c = { a } //a closure always returns its only value
}
assert c() == 'sugar'
def d = c //we can also assign the closure to another variable
assert d() == 'sugar'
c = { def e = { 'milk' }; e }
d = c
assert c == d
v1 = c()
v2 = c()
assert v1 != v2
闭包参数示例
def f = { list, value -> list << value }
x = []
f(x, 1)
f(x, 2,) //trailing comma in argument list OK
f(x, 3)
assert x == [1, 2, 3]
it 为闭包的默认参数
c = { it*3 }
assert c( 'run' ) == 'runrunrun'
如果不定义参数,也是ok的
c = { value1 -> def it = 789; [value1, it] }
//works OK because no 'it' among parameters
assert c( 456 ) == [456, 789]
c = {-> def it = 789; it } //zero parameters, not even 'it', so works OK
assert c() == 789
参数名不能重复,除了'it'
def name= 'cup'
//def c={ name-> println (name) } //name 重复了 会报错
c= { def d= { 2 * it }; 3 * d(it) }
//'it' refers to immediately-surrounding closure's parameter in each case
assert c(5) == 30
owner.it是指外面的变量it( 注意 如果外面的it 定义为def it=2 ,将会报错)
owner是指外部定义的那些不带def 的变量
it= 2
c= { assert it == 3; assert owner.it == 2 }
c(3)
还可以在闭包中嵌套闭包
toTriple = {n -> n * 3}
runTwice = { a, c -> c( c(a) )}
assert runTwice( 5, toTriple ) == 45
闭包返回一个闭包例子(看起来像迭代)
def times= { x -> { y -> x * y }}
assert times(3)(4) == 12
闭包简便写法
def runTwice = { a, c -> c(c(a)) }
assert runTwice( 5, {it * 3} ) == 45 //usual syntax
assert runTwice( 5 ){it * 3} == 45
//when closure is last param, can put it after the param list
def runTwiceAndConcat = { c -> c() + c() }
assert runTwiceAndConcat( { 'plate' } ) == 'plateplate' //usual syntax
assert runTwiceAndConcat(){ 'bowl' } == 'bowlbowl' //shortcut form
assert runTwiceAndConcat{ 'mug' } == 'mugmug'
//can skip parens altogether if closure is only param
def runTwoClosures = { a, c1, c2 -> c1(c2(a)) }
//when more than one closure as last params
assert runTwoClosures( 5, {it*3}, {it*4} ) == 60 //usual syntax
assert runTwoClosures( 5 ){it*3}{it*4} == 60 //shortcut form
分享到:
相关推荐
- **静态类型**:Groovy 2.0及以后版本引入了静态类型检查,允许开发者选择静态类型模式以提高代码的可维护性和性能。 - **集成Java**:Groovy可以无缝地与Java代码混合使用,可以导入Java类库,甚至直接调用Java...
然而,Groovy 2.0引入了`@CompileStatic`注解,允许开发者选择静态类型检查,以提高代码的性能和安全性。 2. **简洁的语法**: Groovy的语法比Java更加简洁,例如,可以省略分号和大括号。此外,Groovy还支持闭包...
例如,Groovy的闭包特性使得函数式编程变得简单,而其动态性则允许在运行时修改类和对象的行为。 在Gradle中,Groovy常用于编写构建脚本,它的灵活性和表达力使得构建逻辑的编写更加直观和简洁。同时,Groovy的语法...
同时,Groovy 2.0引入了静态类型检查,通过`@CompileStatic`注解可以在编译时进行类型检查,提高代码的稳定性和性能。 4. **字符串和正则表达式**:Groovy提供了多种字符串操作方式,如GString(内插字符串)和多行...
【描述】"groovy-common-extensions.zip" 描述的是一个Groovy语言的扩展库,适用于Groovy 2.0及以上版本。Groovy是一种基于Java平台的动态编程语言,它与Java语法兼容,但提供了更简洁的语法和更强的动态特性。...
Groovy遵循Apache License 2.0,这是一个宽松的开源许可证。 在使用Groovy 1.6.5时,开发人员可以利用其动态性来简化代码,比如通过元编程特性动态修改类的行为,或者使用闭包(closures)实现函数式编程风格。此外...
Groovy提供了闭包、元编程等特性,使得代码更简洁、灵活。 2. **Servlet技术**:Servlet是Java服务器端的一个接口,用于生成动态Web内容。它们处理HTTP请求,并通过Servlet容器(如Tomcat)返回响应。Servlet可以...
由于Groovy是开源的,并且遵循Apache Software License 2.0,它可以在各种项目中自由使用,无论是开源还是商业项目。 总的来说,Groovy为Java开发者提供了一种更快速、更灵活的编程工具,它可以在不牺牲与Java平台...
然而,Groovy 2.0之后引入了类型推断,可以在一定程度上提高代码的可读性和性能。 4. **元编程**: 元编程是Groovy的一大亮点,允许在运行时修改或扩展程序的行为。这使得Groovy能够实现诸如AOP(面向切面编程)和...
Groovy是一种面向对象的、动态的编程语言,常用于Java平台,它与Java语法兼容,并提供了许多简洁的特性,如闭包和元编程。 描述中提到,“composite-groovy.zip, 这保留了我们在项目中使用的groovy版本。如果我们...
MVEL表达式的语法类似于JavaScript和Groovy,允许开发者在单行字符串中编写复杂的逻辑。例如,可以使用MVEL来评估数学表达式、条件语句、循环结构以及访问和修改对象的属性。这使得MVEL成为模板引擎、配置文件或动态...
3. **闭包**:Groovy中的闭包是强大的功能,类似于函数对象,可以作为参数传递,也可用于实现高阶函数。 4. **元编程**:Groovy的元编程能力使得在运行时改变类的行为成为可能,例如添加方法或属性。 5. **GString...
同时,Groovy 2.0及以后版本也支持静态类型检查,这有助于提高代码的可读性和性能。 4. **Groovy与Java的互操作性**:由于Groovy运行在JVM上,因此它可以无缝地调用Java库和类,反之亦然。这对于已有的Java项目来说...
开发者可以利用Groovy的闭包和协程特性编写非阻塞代码,提高系统的可扩展性和响应性。 ### 编码/转义的提升 在处理用户输入和输出时,Grails 2.3加强了编码和转义机制,以防止常见的安全漏洞,如跨站脚本(XSS)攻击...
5. **闭包语法**:Gradle 2.0引入了Groovy 2.3,对闭包的处理进行了优化,使得语法更加简洁,如`doLast`和`doFirst`块的使用。 对于某些项目,尤其是像Apache Spark(S4)这样的较早项目,它们可能依赖于特定版本的...
- **发现闭包**:闭包是Groovy的一个核心概念,它允许开发者以简洁的方式定义函数并传递给其他方法。 - **动态编程**:介绍Groovy如何支持动态类型的编程范式,使代码更加灵活。 - **Groovy JDK**:Groovy扩展了Java...
- **闭包**:闭包是Groovy中一个重要的概念,类似于函数,但可以捕获和记住其周围的作用域变量状态。 - **动态编程**:Groovy支持动态语言的特性,如动态类型、动态代理等,使得代码可以更加灵活地响应运行时的情况...
1.2 webc2.0时代 1.3 java的力量 1.4 什么是grails 1.4.1 与java集成 1.4.2 简单而强大 1.4.3 吸取的经验教训 1.5 使用grails的原因 1.6 grails入门 1.6.1 运行grails命令...
- **扩展构建逻辑**:可以使用闭包或Groovy类定义复杂的构建逻辑。 7. **与其他工具集成** - **IDE集成**:Gradle与IntelliJ IDEA、Eclipse等IDE有良好的集成,支持导入和同步Gradle项目。 - **持续集成**:...
它还提供了闭包、groovyShell、groovyConsole等工具,便于开发者调试和测试代码。 2. **构建API**:在Piloto3-API项目中,Groovy被用来创建RESTful API,这些API通常用于前后端分离的架构,提供JSON或XML格式的数据...