前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Groovy】闭包 Closure ( 自定义闭包参数 | 自定义单个闭包参数 | 自定义多个闭包参数 | 闭包参数默认值指定 )

【Groovy】闭包 Closure ( 自定义闭包参数 | 自定义单个闭包参数 | 自定义多个闭包参数 | 闭包参数默认值指定 )

作者头像
韩曙亮
发布2023-03-30 10:16:55
2.5K0
发布2023-03-30 10:16:55
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、自定义闭包参数列表


如果要向 闭包 中 , 传递多个参数 , 需要 为 闭包 指定参数列表 ;

为闭包指定参数列表 , 需要在闭包 开始位置使用 " -> " 符号 , 在该符号的左侧指定参数列表 ;

1、定义一个自定义参数的闭包

在 " -> " 符号左侧写上一个变量 a , 此时 该变量 a 可以接收任意类型的值 , 在闭包中可以打印该参数 a 的值 ;

代码语言:javascript
复制
        // 定义闭包变量 , 声明一个参数 a
        def closure3 = { a ->
            println "${a}"
        }

        // 调用闭包 , 不能传入参数
        closure3.call(1);
        closure3(2);

上述闭包打印结果为 :

代码语言:javascript
复制
1
2

2、定义多个自定义参数的闭包

在 " -> " 符号左侧写上多个变量 , 变量之间由逗号隔开 , 如 a , b , 此时该闭包可以接收多个参数 , 这两个参数可以是任意类型的 ;

代码语言:javascript
复制
        // 定义闭包变量 , 声明两个参数 a, b
        // 在闭包中打印这两个参数
        def closure4 = { a, b ->
            println "${a} : ${b}"
        }

        // 调用闭包 , 不能传入参数
        closure4.call(1, 2);
        closure4(3, 4);

打印结果为 :

代码语言:javascript
复制
1 : 2
3 : 4

3、为闭包参数指定默认值

在闭包中 , 可以使用 参数名 = 默认值 的方式 , 为闭包参数指定默认值后 , 调用闭包时 , 可以不传入这个有默认值的参数 ;

如果 闭包 参数 都有默认值 ,

  • 可以 不传递任何参数 ;
  • 如果此时传递
1

个参数 , 会 按照默认规则从左到右为参数赋值 ;

如果 闭包 参数 , 有的有默认值 , 有的没有默认值 , 假设有

2

个参数 , 有

1

个有默认值 ,

1

个没有默认值 ;

  • 如果 传递
2

个参数 , 则从左到右赋值即可 ;

  • 如果传递
1

个参数 , 则 为没有默认值的参数赋该值 ;

代码示例 :

代码语言:javascript
复制
        // V. 为闭包参数指定默认值


        // 定义闭包变量 , 声明两个参数 a, b
        // 并为闭包指定默认值
        def closure5 = { a = 0, b = "Groovy" ->
            println "${a} : ${b}"
        }

        // 闭包有默认值 , 调用时可以不传入参数
        closure5()

执行结果 :

代码语言:javascript
复制
0 : Groovy

二、完整代码示例


完整代码示例 :

代码语言:javascript
复制
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()
    }
}

执行结果 :

代码语言:javascript
复制
1
2
1 : 2
3 : 4
0 : Groovy
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、自定义闭包参数列表
    • 1、定义一个自定义参数的闭包
      • 2、定义多个自定义参数的闭包
        • 3、为闭包参数指定默认值
        • 二、完整代码示例
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档