Groovy闭包 Closure ( 自定义闭包参数 | 自定义单个闭包参数 | 自定义多个闭包参数 | 闭包参数默认值指定 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Groovy闭包 Closure ( 自定义闭包参数 | 自定义单个闭包参数 | 自定义多个闭包参数 | 闭包参数默认值指定 )相关的知识,希望对你有一定的参考价值。
一、自定义闭包参数列表
如果要向 闭包 中 , 传递多个参数 , 需要 为 闭包 指定参数列表 ;
为闭包指定参数列表 , 需要在闭包 开始位置使用 " -> " 符号 , 在该符号的左侧指定参数列表 ;
1、定义一个自定义参数的闭包
在 " -> " 符号左侧写上一个变量 a , 此时 该变量 a 可以接收任意类型的值 , 在闭包中可以打印该参数 a 的值 ;
// 定义闭包变量 , 声明一个参数 a
def closure3 = a ->
println "$a"
// 调用闭包 , 不能传入参数
closure3.call(1);
closure3(2);
上述闭包打印结果为 :
1
2
2、定义多个自定义参数的闭包
在 " -> " 符号左侧写上多个变量 , 变量之间由逗号隔开 , 如 a , b , 此时该闭包可以接收多个参数 , 这两个参数可以是任意类型的 ;
// 定义闭包变量 , 声明两个参数 a, b
// 在闭包中打印这两个参数
def closure4 = a, b ->
println "$a : $b"
// 调用闭包 , 不能传入参数
closure4.call(1, 2);
closure4(3, 4);
打印结果为 :
1 : 2
3 : 4
3、为闭包参数指定默认值
在闭包中 , 可以使用 参数名 = 默认值 的方式 , 为闭包参数指定默认值后 , 调用闭包时 , 可以不传入这个有默认值的参数 ;
如果 闭包 参数 都有默认值 ,
- 可以 不传递任何参数 ;
- 如果此时传递 1 1 1 个参数 , 会 按照默认规则从左到右为参数赋值 ;
如果 闭包 参数 , 有的有默认值 , 有的没有默认值 , 假设有 2 2 2 个参数 , 有 1 1 1 个有默认值 , 1 1 1 个没有默认值 ;
- 如果 传递 2 2 2 个参数 , 则从左到右赋值即可 ;
- 如果传递 1 1 1 个参数 , 则 为没有默认值的参数赋该值 ;
代码示例 :
// V. 为闭包参数指定默认值
// 定义闭包变量 , 声明两个参数 a, b
// 并为闭包指定默认值
def closure5 = a = 0, b = "Groovy" ->
println "$a : $b"
// 闭包有默认值 , 调用时可以不传入参数
closure5()
执行结果 :
0 : Groovy
二、完整代码示例
完整代码示例 :
import org.codehaus.groovy.ant.Groovy
class Test
static void main(args)
// III. 接收一个自定义参数的闭包
// 定义闭包变量 , 声明一个参数 a
def closure3 = a ->
println "$a"
// 调用闭包 , 不能传入参数
closure3.call(1);
closure3(2);
// IV. 接收两个自定义参数的闭包
// 定义闭包变量 , 声明两个参数 a, b
// 在闭包中打印这两个参数
def closure4 = a, b ->
println "$a : $b"
// 调用闭包 , 不能传入参数
closure4.call(1, 2);
closure4(3, 4);
// V. 为闭包参数指定默认值
// 定义闭包变量 , 声明两个参数 a, b
// 并为闭包指定默认值
def closure5 = a = 0, b = "Groovy" ->
println "$a : $b"
// 闭包有默认值 , 调用时可以不传入参数
closure5()
执行结果 :
1
2
1 : 2
3 : 4
0 : Groovy
以上是关于Groovy闭包 Closure ( 自定义闭包参数 | 自定义单个闭包参数 | 自定义多个闭包参数 | 闭包参数默认值指定 )的主要内容,如果未能解决你的问题,请参考以下文章
Groovy闭包 Closure ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )
Groovy闭包 Closure ( 闭包类 Closure 简介 | thisownerdelegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )
Groovy闭包 Closure ( 闭包调用 | 闭包默认参数 it | 代码示例 )