我找到了这段代码:
def say = {println m}
say.delegate = [m:2]
say()
Run Code Online (Sandbox Code Playgroud)
这显然是打印2.它是如何工作的?哪里可以找到有关的文档.delegate?谷歌引导我进入了代表转换页面,完全没有提到.delegate.
Dón*_*nal 59
闭包的委托是一个对象,用于解析在闭包本身内部无法解析的引用.如果您的示例是这样写的:
def say = {
def m = 'hello'
println m
}
say.delegate = [m:2]
say()
Run Code Online (Sandbox Code Playgroud)
它打印'hello',因为m可以在闭包内解决.但是,如果m没有在闭包内定义,
def say = {
println m
}
say.delegate = [m:2]
say()
Run Code Online (Sandbox Code Playgroud)
将delegate用于解析所述引用,并且在这种情况下delegate是一个Map映射m到2.
ani*_*ish 12
闭包的三个属性,是这个,所有者和委托,一般委托设置为所有者
def testClosure(closure) {
closure()
}
testClosure() {
println "this is " + this + ", super:" + this.getClass().superclass.name
println "owner is " + owner + ", super:" + owner.getClass().superclass.name
println "delegate is " + delegate + ", super:" + delegate.getClass().superclass.name
testClosure() {
println "this is " + this + ", super:" + this.getClass().superclass.name
println "owner is " + owner + ", super:" + owner.getClass().superclass.name
println "delegate is " + delegate + ", super:" + delegate.getClass().superclass.name
}
}
Run Code Online (Sandbox Code Playgroud)
版画
this is ConsoleScript0@11d20d3, super:groovy.lang.Script
owner is ConsoleScript0@11d20d3, super:groovy.lang.Script
delegate is ConsoleScript0@11d20d3, super:groovy.lang.Script
this is ConsoleScript0@11d20d3, super:groovy.lang.Script
owner is ConsoleScript0$_run_closure1@caea19, super:groovy.lang.Closure
delegate is ConsoleScript0$_run_closure1@caea19, super:groovy.lang.Closure
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9726 次 |
| 最近记录: |