闭包是用{}符号括起来的代码块,它可以被单独运行或调用,也可以被命名,类似‘匿名类’或内联函数的概念。
闭包中最常见的应用是对集合进行迭代。
可以通过.&操作符来获得方法闭包。
/**
* 闭包
* */
class ClosureTest {
static main(args) {
def clos1={println "hello Jack"}
//两种调用方式
clos1.call()
clos1()
//参数化的闭包
def clos2={param -> println "hello ${param}"}
clos2.call('Tom')
clos2('Lucy')
//单个隐参数
def clos3={println "hello ${it}"} //这里的it为隐性变量
clos3.call('aaa')
//闭包作用范围
def greeting='welcome'
def clos4={param -> println "${greeting} ${param}"}
clos4.call('Terry')
greeting='come here'
clos4.call('Terry')
def test=new ClosureTest()
test.demo(clos4)
//闭包在集合中的高效使用
[1,2,3,4].each {println it}
['Jack':24,'Terry':26,'Lucy':22].each {if(it.key=='Terry') println it.value}
def value=[2,8,9,3,1,10].findAll({it>8}) //finlAll
println value
}
def demo(clos){
def greeting='hi'
clos.call('Jack')
}
}
hello Jack
hello Jack
hello Tom
hello Lucy
hello aaa
welcome Terry
come here Terry
come here Jack
1
2
3
4
26
[9, 10]