The delegate of a closure is an object that is used to resolve references that cannot be resolved within the body of the closure itself. If your example was written like this instead:
def say = {
def m = 'hello'
println m
}
say.delegate = [m:2]
say()
It prints 'hello', because m
can be resolved within the closure. However, when m
is not defined within the closure,
def say = {
println m
}
say.delegate = [m:2]
say()
the delegate
is used to resolve the reference, and in this case the delegate
is a Map
that maps m
to 2.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…