什么是闭包
闭包在Groovy 的类型是 groovy.lang.Closure,是Groovy的一大利器。
闭包可以视为代码块、语句块、可以访问周围范围内的所有变量或方法。
def z = {
println "hello" }
z()
很简单,闭包只是一个语句,用大括号包含。您可以将其分配给变量,然后像常规方法调用一样调用此闭包。闭包具有一个默认的隐式参数,称为it
。还可以提供自定义的参数。同样,就像方法中的情况一样,闭包的最后一个表达式是闭包的返回值。但是,如果您觉得可读性更高,也可以使用return
关键字。
def square = {
it * it }
assert square(3) == 9
def lengthThan = {
String s, int i -> return s.size() > i }
//def lengthThan = { String s, int i -> s.size() > i }
assert lengthThan("FunTester", 4) == true
assert lengthThan("Fun", 6) == false
闭包和函数的区别
函数执行之后内部变量全部销毁,但是闭包不会,闭包的外部变量会一直保存。
def static add(num) {
def sum = 0
sum += num
return sum
}
def static addByClosure(init) {
def addInner = {
inc ->
init += inc
init
}
return addInner
}
println "one call: ${add(5)}" // one call: 5
println "two call: ${add(5)}" // two call: 5
def addClosure = addByClosure(0)
println "one call: ${addClosure(5)}" // one call: 5
println "two call: ${addClosure(5)}" // two call: 10
闭包的常见用法
闭包可以这样写:
- def clos = {参数名 -> 代码块}
- def clos ={代码块}
def hello = 'Hello'
def clos