Groovy 闭包进阶

1.闭包关键变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//闭包中定义一个闭包
def nestClouser = {
def innerClouser = {
//this 代表闭包定义处的类
println "innerClouser this:" + this
//owner 代表闭包定义处的类或对象
println "innerClouser owner:" + owner
//delegate 代表任意第三方对象 默认值=owner
println "innerClouser delegate:" + delegate
}
//innerClouser.delegate = p //修改默认的delegate,this和owner不能修改
innerClouser.call()
}
nestClouser.call()
out:
innerClouser this:Demo49@3ecedf21
innerClouser owner:Demo49$_run_closure2@6df20ade //指向了它最近的一个类或对象
innerClouser delegate:Demo49$_run_closure2@6df20ade
//innerClouser delegate:Person@9a7a808
2.闭包的委托策略
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Student{
String name
def pretty = {"my name is ${name}"}
String toString(){
pretty.call()
}
}
class Teacher{
String name
}
def stu = new Student(name: 'wcq')
def tea = new Teacher(name: 'qqq')
stu.pretty.delegate = tea
stu.pretty.resolveStrategy = Closure.DELEGATE_FIRST
println stu.toString()