Groovy 之 Closure
给它的定义:
Closures are anonymous blocks of code that can accept parameters and can return a value. They can be assigned to variables and can be passed as parameters to methods.
匿名代码块;
可向它传入参数;
可被赋给变量;
自身可作为参数传递到方法中;
Closure square = {it * it
}
square 16
简单的Closure:
def myClosure = { println 'Hello world!' }
//execute our closure
myClosure()
接受一个参数的Closure:
def myClosure = {String str -> println str }
//execute our closure
myClosure('Hello world!')
一个参数时,在闭包内可以用it代替
def myClosure = {println it }
//execute our closure
myClosure('Hello world!')
接受多个参数
def myClosure = {String str, int num -> println "$str : $num" }
//execute our closure
myClosure('my string', 21)
参数类型是可选的,上面的还可以写成这样
def myClosure = {str, num -> println "$str : $num" }
//execute our closure
myClosure('my string', 21)
闭包可以引用创建它的上下文中的变量
def myVar = 'Hello World!'
def myClosure = {println myVar}
myClosure()
闭包的上下文Context可利用setDelegate()来切换
这个概念在后面会变的非常有用。
def myClosure = {println myVar}
MyClass m = new MyClass()
myClosure.setDelegate(m)
myClosure()class MyClass {def myVar = 'Hello from MyClass!'
}
在创建myClosure之时,myVar是不存在的,但在执行myClosure之前,将myClosure的context改变为MyClass
传递Closure参数
下面是方法中传递Closure参数的多重写法
接受一个参数
myMethod(myClosure)
如果只有一个参数,括号可省略
myMethod myClosure
in-line内联形式
myMethod {println 'Hello World'}
两个参数
myMethod(arg1, myClosure)
第二个参数为in-line形式
myMethod(arg1, { println 'Hello World' })
如果方法最后一个参数是闭包,那么可将其移出来
myMethod(arg1) { println 'Hello World' }
Groovy 之 Closure相关推荐
- groovy的Closure
1.Closures的语法 格式语法:{ [closureParameters -> ] statements } { name -> println name } 2.Closures对 ...
- groovy之closure
什么是闭包(Closure) 在Groovy中,闭包是一段匿名的代码段,它可以有参数,返回值,并且能够赋值给一个变量.闭包中使用的变量可以是在闭包外部定义的,也可以是在闭包内部定义的. 闭包定义的语法 ...
- 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )
文章目录 总结 一.静态闭包变量 1.执行普通闭包变量 2.执行静态闭包变量 二. 在闭包中定义闭包 三. 完整代码示例 总结 在闭包中 , 打印 this , owner , delegate , ...
- 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员赋值及源码分析 )
文章目录 总结 一.闭包类 Closure 简介 二.闭包类 Closure 中 this.owner.delegate 成员 源码分析 三.分析编译后的字节码文件内容 总结 在闭包中 , 打印 th ...
- Groovy Closure
Closure - 闭包 在Java中的Lambda和Groovy的Closure非常相似,但是底层的实现机制是非常不同的. # 简单示例 对于一个「闭包」的简单使用如下: // 声明一个闭包 Clo ...
- Groovy Closure简介
什么是闭包(Closure) 在Groovy中,闭包是一段匿名的代码段,它可以有参数,返回值,并且能够赋值给一个变量.闭包中使用的变量可以是在闭包外部定义的,也可以是在闭包内部定义的. 闭包定义的语法 ...
- Groovy中的闭包
groovy中的一个核心语法:closurs,也叫闭包.闭包在groovy中是一个处于代码上下文中的开放的,匿名代码块.它可以访问到其外部的变量或方法. 1. 句法 1.1 定义一个闭包 { [clo ...
- 【错误记录】Groovy 函数参数动态类型报错 ( Caught: groovy.lang.MissingMethodException: No signature of method )
文章目录 一.报错信息 二.解决方案 一.报错信息 定义 Groovy 函数 , void fun(object) {object.hello() } 如果传入的 实例对象 中 , 没有定义 hell ...
- 【Groovy】Groovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )
文章目录 前言 一.Groovy 中函数实参自动类型推断 二.函数动态参数注意事项 三.完整代码示例 前言 Groovy 是动态语言 , Java 是静态语言 ; 本篇博客讨论 Groovy 中 , ...
最新文章
- VR如何巧妙填补传统数据视觉化的漏洞
- escape sequence
- 关于source insight 置顶窗口或者处于前台挡住窗口解决办法
- 视音频数据处理入门:AAC音频码流解析
- kmeans算法中的sse_聚类算法入门:k-means
- python 整数输出 d f_pythn print格式化输出---------%s 和 % d 都是什么意思?
- Android4.0 添加一个新的Android 键值
- 可以同时开发php Java_php可以和java一起开发吗
- Mybatis框架相关知识讲解
- Ubuntu Server 命令行下显示中文乱码(菱形)解决办法
- 国军标--Gjb软件需求规格说明书模板
- 禁止百度云盘p2p后台上传
- masm32v12编译器自带库masm32.lib在nasm中的使用。
- 分段插值法 | 分段线性插值 + 分段抛物插值
- R笔记3:ggplot绘制商务图表…
- bzoj 3717 [PA2014]Pakowanie
- python信用卡识别_在python中验证信用卡号码
- 解决告警“warning #1295-D Deprecated declaration xxxxxxx - give arg types”方法
- Oracle导入dmp 文件
- C#读取Excel日期时间