博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Groovy快速入门-11-闭包Closures和范围Ranges
阅读量:4302 次
发布时间:2019-05-27

本文共 1656 字,大约阅读时间需要 5 分钟。

这篇来学习闭包,很多脚本语言中有闭包这个概念,javascript中也有闭包,java是没有这种语法的,groovy中引入了闭包的概念,闭包确实可以让我们少写很多代码。如果不懂闭包,代码就感觉看不懂。

1.什么是闭包

在中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。

闭包的概念出现于60年代,最早实现闭包的程序语言是。之后,闭包被广泛使用于语言如和。很多命令式程序语言也开始支持闭包。

以上解释来自维基百科。闭包就是一个{}中的代码块,闭包有以下特点

-有参数-可以支持变量引用-可以有返回值-可以在方法中传递参数

 

2.如何使用闭包

下面写一个简单闭包和调用闭包的例子

package com.anthony.demodef myClosure = { println "Hello Groovy"}// 调用闭包myClosure.call()

运行下

Hello Groovy

上面代码改成带参数的闭包

package com.anthony.demodef myClosure = { name -> println "Hello ${name}"}// 调用闭包myClosure.call("Anthony")

上面符号 -> 这个在闭包中一定会用到,如果有参数。

 

有返回值的闭包例子

package com.anthony.demo// 有返回值的闭包def myClosure = {	a,b,c ->	return (a+b+c)}println myClosure(1,2,3)

运行可以打印出6

List集合中使用闭包来遍历元素输出

package com.anthony.demo// Listdef myList = ["苹果", "香蕉", "葡萄"]myList.each { 	it ->	println it}

 

Map集合使用闭包来遍历

package com.anthony.demo// Mapdef myMap = [	"name": "Anthony",	"age": "18",	"city": "Beijing"]myMap.each { 	key,value ->	println key + ":" + value}

 

3.为什么需要闭包

闭包是只有在被调用时才执行,所以多用来写控制结构的代码。有一些语言中的控制分支语句和循环语句是采用闭包实现的。我们在实际的代码开发中,特别在groovy中,主要是对集合类的遍历使用闭包比较多。

 

4.Ranges

范围的意思,一般用来创建一个List或者创建一个有序序列的值,范围需要指出第一个后最后一个元素,例如1..9 表示1到9,'a'..'d'表示a b c d

范围有两种写法,一个包含最后一个,另外一种不包含

package com.anthony.demo// Rangesdef range = 1..10println range.size()println range.getFrom()println range.getTo()println "++++++++++++"def range1 = 1..<10println range1.size()println range1.getFrom()println range1.getTo()
10110++++++++++++919

下面看看range的遍历

package com.anthony.demo// Rangesdef range = 1..10for(i in range) {	println i}

 

 

转载地址:http://wjows.baihongyu.com/

你可能感兴趣的文章
互斥锁 synchronized分析
查看>>
java等待-通知机制 synchronized和waity()的使用实践
查看>>
win10 Docke安装mysql8.0
查看>>
docker 启动已经停止的容器
查看>>
order by 排序原理及性能优化
查看>>
Lock重入锁
查看>>
docker安装 rabbitMq
查看>>
git 常用命令 入门
查看>>
linux安装docker
查看>>
关闭selinx nginx无法使用代理
查看>>
shell 脚本部署项目
查看>>
spring cloud zuul网关上传大文件
查看>>
springboot+mybatis日志显示SQL
查看>>
工作流中文乱码问题解决
查看>>
maven打包本地依赖包
查看>>
spring boot jpa 实现拦截器
查看>>
jenkins + maven+ gitlab 自动化部署
查看>>
Pull Request流程
查看>>
Lambda 表达式
查看>>
函数式数据处理(一)--流
查看>>