Groovy闭包

定义

闭包(Closure)是一种数据类型,它代表一段可执行的代码。它可以作为方法的参数,或者返回值,也可以独立运行,定义如下:

def xxx = {parameters -> code}  
  def xxx = {无参数,纯code}

如我们定义一个名字叫add的闭包,如下:

def add = { a, b -> a + b }
println("3+5=" + add(3, 5))

如果闭包没有定义参数,那边它隐含一个参数it,类似Java中的this,假设你的闭包不需要接受参数,但是还是会生成一个隐式参数it,只不过它的值为null,也就是说,闭包至少包含一个参数。

def greeting = { "Hello Closure, $it!" }
println(greeting(‘Jack‘));
def getStr = { return "abcd:$it" }
println(getStr())

输出如下:

Hello Closure, Jack!
abcd:null

当闭包作为闭包或方法的最后一个参数,可以将闭包从参数圆括号中提取出来接在最后,如果闭包是唯一的一个参数,则闭包或方法参数所在的圆括号也可以省略。

def run = { int a, Closure c -> c(a) }
println(run(5) { y -> y * 3 })
def run2 = { Closure c -> c.call() }
run2 {
    println("jack:Closure")
}

输出如下:

15
jack:Closure

如果闭包的参数声明中没有list,那么传入参数可以设置为list,里面的参数将分别传入闭包参数。

def list = [1, 2, 3]
def sum= {a, b, c-> a + b + c}
println(sum(list))

输出如下:

6

闭包是可嵌套的

def gcdgcd={ m,n-> m%n==0? n: gcd(n,m%n) }println(gcd(28,35))

输出如下:

7

原文地址:https://www.cnblogs.com/rainboy2010/p/8997671.html

时间: 2024-10-16 03:49:53

Groovy闭包的相关文章

groovy 闭包

语法规则 { [closureParameters -> ] statements } 下面的语句都是正确的 1 { 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 ->

学习Groovy — 闭包

定义闭包的几种方式 map = ['a':1, 'b':2] // simple declaration, anonymous closure map.each{ key, value -> map[key] = value * 2} assert map == [a:2, b:4] // assignment to variables doubler = {key, value -> map[key] = value *2} map.each(doubler) assert map == [

groovy 闭包的用途

迭代: def names = ["sky","lily","tom"] names.forEach {     println it.toUpperCase() } map = ['a': 1, 'b': 2] map.each {key, value ->      map[key] = value * 2 } assert map == ['a': 2, 'b': 4]  //结果 SKY LILY TOM   true 回调 def

Groovy/Spock 测试导论

测试对于软件开发者而言至关重要,不过总会有人说:"写代码是我的事,测试那是QA的工作",这样的想法真是弱爆了,因为大量的业界实践已经证明测试驱动编码可以有效地帮助开发者提升代码质量. 大多数遵循TDD的Java开发者均会使用mockito或powermock,但mockito和powermock均包含了许多样本代码,导致测试代码变得冗长而难以维护.在测试中引入Groovy/Spock后,我完全被它们吸引,并转向使用Groovy/Spock来替代原有的测试框架. 下面将围绕一个简单例子来

Gradle学习之闭包

Gradle中的闭包其实就等同于Groovy中闭包,Groovy是一种jvm语言,语法兼容于java,曾几何时,也在脚本语言中独树一帜,初学Gradle的时候,大家很容易被其语法所迷惑,由于Gradle基本上是基于闭包以及委托实现的,所以要学Gradle必须先学Groovy闭包 一.Groovy中的闭包(Closures) 1.闭包是一种匿名的代码块,这个代码块可以有参数及返回值,同时也可以被定义成变量,在Groovy中闭包是一个对象,我们可以简单的把它理解成将方法赋值给一个变量 2.定义闭包的

教妹学 Java:动态伴侣 Groovy

00.故事的起源 “二哥,听说上一篇<多线程>被 CSDN 创始人蒋涛点赞了?”三妹对她提议的<教妹学 Java>专栏一直很关心. “嗯,有点激动.刚开始还以为是个马甲,没想到是真人!” “其实蒋涛点赞的文章很多很多了,二哥的只是其中一篇而已.”三妹出乎意料地泼起了冷水. “你说得没错.但这的确给我注入了新的能量,蒋涛毕竟是业界的大佬啊.” “那就让我们开始新的篇章吧!我继续来提问,二哥你继续回答.”三妹已经迫不及待了. 01.二哥,什么是 Groovy 啊? 三妹啊,听哥来给你慢

Gradle+Groovy基础篇

在Java项目中,有两个主要的构建系统:Gradle和Maven.构建系统主要管理潜在的复杂依赖关系并正确编译项目.还可以将已编译的项目以及所有资源和源文件打包到.war或.jar文件中.对于简单的构建,Maven和Gradle之间的选择几乎是个人喜好之一,或者也许是公司CTO或技术经理的偏好.他们俩都是非常好的构建工具.但是,对于更复杂的项目,Gradle比Maven更胜一筹. Gradle构建的利与弊 个人喜欢Gradle:我讨厌XML,复杂的Java/Groovy项目,如果没有Gradle

gradle学习总结,偷窥android studio的底裤

原文来自微凉一季的博客http://jijiaxin89.com/2015/08/29/gradle-use-note/ 用过android studio的对gradle应该都不陌生了,gradle文件的基本配置大同小异,略做了解使用应该是没什么问题了.但是深入细致的了解一下对于理解项目还是很有帮助的,尤其是遇到一些配置复杂的github项目,不了解gradle可能会遇到跑不起来又束手无策的情形.下面对gradle相关知识.用法做一下总结. DSL (domain specific langua

Gradle 入门--只此一篇

题外话: Android的编译还要配合Prograd 是什么? 在语法上是基于Groovy语言的(Groovy 是一种基于JVM的敏捷开发语言,可以简单的理解为强类型语言java的弱类型版本),在项目管理上是基于Ant和Maven概念的项目自动化建构工具. 基础知识准备 Java基础,命令行使用基础 官方文档:https://docs.gradle.org/current/dsl/ * Gradle使用指南:* https://gradle.org/docs/current/userguide/