`

Groovy闭包

阅读更多
1.闭包可以是指针,也可以直接调用,还可以将其作为参数传递:
def closure = {x-> x*3}
closure.call('h')  //Result: "hhh"

def method(clo) {
    clo.call('h')
}
method(closure)    //Result: "hhh"
method() {x-> x*3} //Result: "hhh"
method {x-> x*3}   //Result: "hhh"
method closure     //Result: "hhh"

调用闭包也可以省略call()
def closure = {x-> x*3}
closure('h')  //Result: "hhh"

当方法只有一个参数时,可以省略括号调用,如下两种调用方式都是一样的(闭包也是一样):
def method(x) {
    println x
}
method 5
method(5)

def closure = {x-> println x}
closure 'h'
closure('h')
closure.call('h')

2.闭包和方法一样,形参个数必须和实参个数相等,也可以和方法一样使用默认参数:
//方法
def method(x, y = 'h') {
    return y*x
}
method(3)     Result: "hhh"
method(3,'k') Result: "kkk"

//闭包
def closure = {x,y='h'->
    return y*x
}
closure 3      //Result: "hhh"
closure(3,'k') //Result: "kkk"

3.作用范围,闭包体内只能使用和闭包同一级的引用:
def name = 'Bruce'
def greeting = {println "Hi,${name}.Nice to see you"}
greeting() //Hi,Bruce.Nice to see you

name = 'Phil'
greeting() //Hi,Phil.Nice to see you

def method(closure) {
    name = 'Divid'
    //can not affect closure
    closure() //Hi,Phil.Nice to see you
}
method(greeting)

4.应用部分:
def subtract = {x,y->
    println x - y
}
//subtract.curry(20)操作会返回{y-> println 20 - y},即把第一个形参删掉,以实参替换闭包体中所有的被删除掉的形参
def subClosure = subtract.curry(20)
subClosure.call(5) //15

5.闭包组合,可以使用组合来构造出完成复杂任务的闭包组:
def composition = {a,b,c->a(b(c))}
def multiply1 = {x->return 3 * x}
def multiply2 = {x->return 4 * x}
composition(multiply1,multiply2,5) //Result: 60
分享到:
评论

相关推荐

    Z2-Groovy in Action.pdf

    Groovy闭包可以像方法一样被调用,也可以作为参数传递给其他方法。闭包中可以自由地访问它被创建时作用域中的变量(闭包的自由变量)。这为Groovy的编程提供了很大的灵活性,例如可以轻松实现事件监听、回调函数、...

    [Groovy入门]第五讲.将流程控制语句与方法重构为闭包

    在学习Groovy的过程中,掌握闭包这一核心概念至关重要,尤其是在重构流程控制语句和方法时。本讲我们将深入探讨如何将传统的流程控制结构和方法转换为Groovy的闭包,以提高代码的可读性和可维护性。 首先,让我们...

    groovy(10)-闭包委托策略1

    在Groovy语言中,闭包是一种强大的特性,它允许我们创建可执行的代码块,并可以在不同的上下文中使用。闭包有三个重要的变量:`this`, `owner`, 和 `delegate`,它们各自扮演着不同的角色。 1. **this**: `this`...

    groovy入门实例代码详细(包括字符串,map,闭包等等)

    本入门实例代码详细地涵盖了Groovy的一些核心概念和常用特性,包括字符串操作、Map的使用以及闭包等。 1. **字符串操作**: - Groovy中的字符串可以是单引号或双引号包裹的。双引号中的变量可以直接展开,单引号则...

    groovy入门经典,groovyeclipse 插件

    Groovy的语法简洁,支持面向对象编程、函数式编程,并提供了许多现代语言特性,如闭包和动态类型。这使得Groovy成为快速开发、脚本编写以及构建自动化等任务的理想选择。 GroovyEclipse是一款强大的Eclipse插件,...

    groovy in action 中文版 2017.11

    Groovy提供了大量的动态特性,比如动态类型、闭包、元编程能力等,使得编写脚本或应用程序变得更加高效和愉悦。Groovy是完全兼容Java的,这意味着Java开发人员可以轻松地使用Groovy编写程序,并利用Groovy提供的强大...

    Groovy Script 入门

    3. **闭包支持**:闭包是Groovy的一个强大特性,它可以像对象一样被传递和存储,用于实现高级编程模式。 4. **元编程**:Groovy支持元编程,可以通过反射机制修改程序的行为。 5. **简洁的语法**:Groovy具有简洁的...

    Grails A Quick-Start Guide:Dave Klein (DK)

    - **Groovy 闭包**:闭包是 Groovy 的一大特色,本书解释了闭包的概念以及如何在 Grails 中使用闭包编写简洁高效的代码。 - **Groovy 集合操作**:介绍了 Groovy 中集合的基本操作,以及如何利用这些特性来简化数据...

    apache-groovy-sdk-4.0.1下载

    - **闭包**:Groovy的闭包是强大的功能,可以用来实现函数式编程和回调机制,使得代码更加简洁和高效。 - **元编程**:Groovy允许在运行时修改类和对象的行为,这使得它非常适合构建框架和库,比如Grails web框架...

    groovy-2.3.6-installer

    Groovy的语法简洁明了,支持闭包和动态类型,使得开发效率大大提高。此外,Groovy还可以用于构建脚本、Web开发(如Grails框架)、自动化测试(Spock框架)、数据处理和集成等多种用途。 Groovy与Java的互操作性是其...

    Groovy轻松入门—搭建Groovy开发环境

    - **闭包**:Groovy的闭包是强大的功能,类似于函数指针,可以用于函数式编程。 - **GString**:Groovy中的字符串可以使用`${expression}`内嵌表达式,例如`"Hello, ${name}"`。 - **方法默认参数和命名参数**:...

    Groovy学习资料

    此外,Groovy还有闭包(Closure)的概念,这是Groovy强大的功能之一,它可以用来处理函数式编程任务,如数据过滤和映射。 其次,Groovy的动态特性是另一个关键知识点。Groovy可以在运行时改变类的结构,这意味着你...

    apache-groovy-sdk-3.0.6.zip

    7. **函数式编程支持**:Groovy支持闭包和高阶函数,这使得函数式编程风格在Groovy中变得非常自然,提高了代码的可读性和可维护性。 8. **动态和静态类型**:Groovy允许开发者在同一个项目中同时使用动态和静态类型...

    Groovy安装以及简单使用

    在Groovy中,`each`方法接收一个闭包作为参数,这个闭包对数组中的每个元素进行操作。上面的代码会打印出每个数字的两倍值。 Groovy与Java的集成非常紧密,可以通过`@groovy.transform.CompileStatic`注解实现静态...

    groovy

    3. 支持闭包:Groovy中的闭包类似于函数引用,可作为参数传递,有助于实现函数式编程风格。 4. GString:类似于Java的字符串,但支持占位符表达式,使字符串操作更便捷。 5. 链式调用:对象属性和方法可以连续调用,...

    某些必要的groovy

    3. **闭包(Closures)**:Groovy的闭包是其强大的特性之一,它类似于函数指针,可以作为参数传递,也可以作为返回值。闭包在处理集合操作、事件驱动编程或异步处理时非常有用。 4. **GroovyShell和...

    Groovy入门教程.doc

    此外,Groovy支持闭包(Closures),这是其强大的功能之一,可以用来创建函数式编程风格的代码。 Groovy还提供了许多其他特性,比如元编程(Metaprogramming)、领域特定语言(DSLs)构建能力,以及对Java库的无缝...

Global site tag (gtag.js) - Google Analytics