首页 > 其他分享 >3.5 闭包

3.5 闭包

时间:2023-02-23 14:02:16浏览次数:28  
标签:闭包 groovy hi 3.5 println call def


 3.5.1 闭包的基本技能点

闭包的定义:

闭包就是一段代码块,用{}括起来:

def c = { println 'hi groovy'}

3.5 闭包_字符串

3.5 闭包_调用方法_02

 

**闭包调用/执行:

c.call()
c() //类似调用方法一样

3.5 闭包_显式_03

3.5 闭包_字符串_04

 

闭包传入参数:**

无参数

// -> 前:闭包参数   -> 后:闭包体
def c = { -> println 'hi groovy'}
c.call()

3.5 闭包_调用方法_05

3.5 闭包_调用方法_06

 

可以传入一个参数

def c = { String str -> println "hi ${str}"}
c.call('groovy')

3.5 闭包_调用方法_07

3.5 闭包_字符串_08

 

可以传入多个参数:(用逗号隔开参数即可)

def c = { String str,int num -> println "hi ${str} , hi ${num}"}
def num = 19
c.call('groovy',num)

3.5 闭包_调用方法_09

3.5 闭包_调用方法_10

 

有默认的参数:

所有闭包都有一个默认参数,不需要你显式声明,用it接收

def c = { println "hi ${it} "}
c.call('groovy')

3.5 闭包_显式_11

3.5 闭包_调用方法_12

 

如果你不想叫it,那么就需要自己手动显式将参数定义即可,一旦定义那么就没有默认参数了(隐式参数)

闭包返回值:

闭包一定有返回值,如果不写,就相当于返回null

def c = { println "hi ${it} "}
def result = c.call('groovy')
println result

3.5 闭包_字符串_13

3.5 闭包_字符串_14

 

可以定义返回值:

```
def c = { return "hi ${it} "}
def result = c.call('groovy')
println result
```

3.5 闭包_显式_15

3.5 闭包_字符串_16

 

3.5.2 闭包的常见使用场景

1、与基本数据类型结合使用(for循环场景)

(1)案例:从2-7进行遍历: -------**upto

2.upto(7){println it}

3.5 闭包_字符串_17

3.5 闭包_显式_18

 

底层对应源码:

3.5 闭包_字符串_19

 

(2)案例:1+2+3+。。。。+100 -------**upto

```
//1+2+3+。。。。+100
def result = 0
1.upto(100){result += it}
println result
```

3.5 闭包_显式_20

3.5 闭包_字符串_21

 

(3)案例:输出7-2 -------**downto

7.downto(2){println it}

3.5 闭包_字符串_22

3.5 闭包_调用方法_23

 

(4)案例:输出100以内的数 --- times (从0开始遍历到指定数结束)

3.times {println it}

3.5 闭包_字符串_24

3.5 闭包_显式_25

3.5 闭包_显式_26

3.5 闭包_显式_27

 

(5)案例:1+2+。。。100 ----- times

def r = 0
101.times {r += it}
println r

3.5 闭包_显式_28

3.5 闭包_字符串_29

 

补充:写法两种:

//如果闭包是调用方法的最后一个参数,可以直接将闭包写在外面
2.upto(7){println it} //常用
2.upto(7,{println it}) //不常用

3.5 闭包_字符串_30

3.5 闭包_调用方法_31

 

**2、与字符串结合使用

 

package com.msb.test01

def s = "hi groovy 2023"

//遍历:PS :如果闭包是方法的最后一个参数,我们可以写在外面,不用非要写到()中
println s.each {println it} //each的返回值就是字符串s本身

//找到符合条件的第一个值
println s.find {it.isNumber()}
//PS :参照源码发现 !bcw.call(new Object[]{value} --》闭包返回值必须是布尔值

//找到符合条件的全部值
def list = s.findAll {it.isNumber()}
println list.toListString()

//判断任意一位是否满足条件
println s.any {it.isNumber()}

//判断每一位是否满足条件
println s.every {it.isNumber()}

//收集结果:
def list2 = s.collect {it.toUpperCase()}
println list2.toListString()

3.5 闭包_字符串_32

3.5 闭包_显式_33



标签:闭包,groovy,hi,3.5,println,call,def
From: https://blog.51cto.com/u_15975228/6081155

相关文章

  • 3.5 闭包
     3.5.1闭包的基本技能点闭包的定义:闭包就是一段代码块,用{}括起来:defc={println'higroovy'} **闭包调用/执行:c.call()c()//类似调用方法一样 闭包传入参数:**无参......
  • 3.5 闭包
    ​ 3.5.1闭包的基本技能点闭包的定义:闭包就是一段代码块,用{}括起来:defc={println'higroovy'} **闭包调用/执行:c.call()c()//类似调用方法一样 闭......
  • 3.5 闭包
    ​ 3.5.1闭包的基本技能点闭包的定义:闭包就是一段代码块,用{}括起来:defc={println'higroovy'} **闭包调用/执行:c.call()c()//类似调用方法一样 闭......
  • 熟悉JavaScript闭包
    熟悉JavaScript闭包闭包(closure)是一个函数以及其捆绑的周边环境状态(lexicalenvironment,词法环境)的引用的组合。简而言之,闭包让开发者可以从内部函数访问外部函数的作用......
  • Golang基础-闭包
    funcfib()func()int{ varn1,n2int returnfunc()int{ ifn1==0&&n2==0{ n1=1 }else{ n1,n2=n2,n1+n2 } returnn2 }}next......
  • 闭包的作用 理解
    概念闭包就是一个函数返回另一个函数;作用①保护函数之间会形成一个不受外部干扰的私有作用域,适合模块开发使用(es6,commonJS)②保存当一个函数返回另一个引用数据类型,当返......
  • #10091. 「一本通 3.5 例 1」受欢迎的牛
    #include<cstdio>#include<iostream>usingnamespacestd;constintN=1E4+10;constintM=5E4+10;structnode{intto,nxt;}e[M];inthead[N......
  • 一句话解释闭包
    在JS中变量的作用域属于函数作用域,在函数执行完后,作用域就会被清理,内存也会随之被回收,但是由于闭包函数是建立在函数内部的子函数,由于其可访问上级作用域,即使上级函数执......
  • etcd3.5.0版本集群部署
    参考地址:https://www.cnblogs.com/nf01/articles/15324715.htmlhttps://www.cnblogs.com/linuxws/p/11194403.htmlEtcd是一个分布式键值存储系统,Kuber......
  • Photoshop 2022 for Mac(ps 2022) v23.5.2激活版
    Photoshop2022中文版是一款专业图像处理软件,PS2022此次更新软件可选择项目云服务生成更准确和高质量的图像;软件界面也有了新的中性UI颜色模式,视觉效果更加高级;对神经滤波器......