簡體   English   中英

.delegate在groovy中意味着什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM