Groovy中有几个挺奇怪的地方
this
owner
delegate
下面为例子
class Mother {
int field = 1
int foo() {
return 2
}
Closure birth (param) {
def local = 3
def closure = {caller -> [this, field, foo(), local, param, caller, owner]
}
return closure
}
def cc = {
println this.class.name
println delegate.class.name
def nn = {
println owner.class.name
println this.class.name
}
nn()
}
}
Mother julia = new Mother()
closure = julia.birth(4)
context = closure.call(this)
println context[0].class.name
assert context[5] instanceof Script
assert context[6] instanceof Mother
println this
julia.cc()
得到的结果为
Mother
Script6@35eed0
Mother
Mother
Mother$_closure1
Mother
this为定义Closure的一个类的引用
owner为包含Closure的对象,可以为this或Closure
delegate为大部分情况与owner相同
this
owner
delegate
下面为例子
class Mother {
int field = 1
int foo() {
return 2
}
Closure birth (param) {
def local = 3
def closure = {caller -> [this, field, foo(), local, param, caller, owner]
}
return closure
}
def cc = {
println this.class.name
println delegate.class.name
def nn = {
println owner.class.name
println this.class.name
}
nn()
}
}
Mother julia = new Mother()
closure = julia.birth(4)
context = closure.call(this)
println context[0].class.name
assert context[5] instanceof Script
assert context[6] instanceof Mother
println this
julia.cc()
得到的结果为
Mother
Script6@35eed0
Mother
Mother
Mother$_closure1
Mother
this为定义Closure的一个类的引用
owner为包含Closure的对象,可以为this或Closure
delegate为大部分情况与owner相同