Groovy 闭包 -- Gradle教程(三)

栏目: Groovy · 发布时间: 7年前

内容简介:Groovy 闭包 -- Gradle教程(三)

Groovy 闭包是代码块,可以被引用、带参数、作为方法参数传递、作为返回值从方法调用返回。

语法简介

先来看看闭包的语法,如下面的所示,很简单,其中方括号表示其可省略。

{ [closureParameters -> ] statements }

closureParameters 是可选的参数列表,可以是0到多个,参数是可以有类型的,或者无类型的。如果声明了参数,那么其后面的 -> 则必须添加,用于区分参数和函数体。

再来看看一些具体的例子。

// 编号1
{ item -> item++ }

// 编号2
{ item++ }

// 编号3
{ println it }

// 编号4
{ it -> println it }

// 编号5
{ name -> println name }

// 编号6
{
  String x, int y ->
    println "hey ${x} the value is ${y}"
}

// 编号7
{
  reader ->
    def line = reader.readLine()
    line.trim()
}

第一个例子,表明了一个没有类型的参数的自增操作;第二个例子是第一个例子的简写,自由一个参数时可以这样简写;第三个和第四个例子,也是同样的意思;第五个例子,是第四个例子的另一种写法,表明参数的名字可以随意规定;第六个例子,则是多类型参数的写法,其中 ${} 指引用了具体的值;第七个例子,表明表达式可以有多行。

闭包在 Groovy 中的特殊属性

闭包在 Groovy 中实际上是类型为 groovy.lang.Closure 的对象,我们来看看下面的代码。

def listener = {
  e -> println "Clicked on $e.source"
}

assert listener instanceof Closure

所以,Closure 里面的方法都可以调用,例如 listener.call() 。Closure 对象中,有三类非常重要的属性,分别是 this, owner, delegate。

  1. this 表示定义闭包的外围类。
  2. owner 表示定义闭包的直接外围对象,可以是类或者闭包。
  3. delegate 表示一个用于处理方法调用和属性处理的第三方类。

例如我们申明一个这样的闭包。

def cl = { name.toUpperCase()}

这时候 cl 并不知道任何信息,name 是什么也不清楚。这时候就可以将 delegate 引入,将具体的逻辑委托给另一个类。

class Preson {
  String name
}
def person = new Person(name: 'tom')
cl.delegate = person;

assert cl() == 'TOM'

实际示例

我们通常在使用 task 时,会在后面使用 doLast 这个函数,doLast 接受一个闭包作为参数。

task helloWorld {
        doLast {
                println "Hello, world!"
        }
}

实际上 doLast 后面只接受一个参数,也就是闭包,如果你使用 doLast(Closure) 也是可以的。

更多信息参考 http://groovy-lang.org/closures.html

文档信息


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

IT大败局

IT大败局

Merrill R.Chapman、周良忠 / 周良忠 / 电子工业出版社 / 2004-8-1 / 35.00

这是一本由作者亲身经历写就的MBA式教案。通过作者那专业人士的敏锐、活泼流畅的文笔和美国人特有的幽默,本书为我们剖析了IT界十个有代表性且影响深远的愚蠢败局。这十个败局涉及企业经营的十个主要方面,它们是:产业标准的魔力,“缩水”产品的阴霾,产品定位的泥潭,市场关系的教训,巨型企业的困惑,企业并购的陷阱,品牌战略的迷茫,技术导向的失衡,企业公关的真谛和科技虚幻的诱惑。 书中有许多鲜为人......一起来看看 《IT大败局》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换