[英]What does .delegate mean in groovy?
我找到了這段代碼:
def say = {println m}
say.delegate = [m:2]
say()
這顯然是打印2.它是如何工作的? 哪里可以找到關於.delegate
文檔? 谷歌引導我進入代表轉換頁面,完全沒有提到.delegate
。
閉包的委托是一個對象,用於解析在閉包本身內部無法解析的引用。 如果您的示例是這樣寫的:
def say = {
def m = 'hello'
println m
}
say.delegate = [m:2]
say()
它打印'hello',因為m
可以在閉包內解析。 但是,當m
沒有在閉包內定義時,
def say = {
println m
}
say.delegate = [m:2]
say()
delegate
用於解析引用,在這種情況下, delegate
是將m
映射到2的Map
。
閉包的三個屬性,是這個,所有者和委托 ,一般委托設置為所有者
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
}
}
版畫
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.