我有一個Groovy特性,它需要提供一個配置Closure作爲庫方法調用的參數(它是HttpBuilder,但它應該沒關係)。如何讓閉包代理在特性中被調用時正確使用
爲了再現這個問題,我創建了以下簡單的例子:
trait T {
def doIt() {
return {
n = 1
}
}
}
class Delegate {
int n
}
class Tish implements T {
def go() {
def closure = doIt()
def d = new Delegate()
closure.delegate = d
closure()
assert d.n == 1
}
}
new Tish().go()
這是預期,因爲在T
性狀doIt()
方法返回的封閉運行時無差錯運行,其委託設置的東西,可以設置n
變量設置爲1 ....
然而,這並不工作,我得到這個錯誤:
groovy.lang.MissingPropertyException: No such property: n for class: Tish
如果我讓T
上課,讓Tish
擴展它,那麼它的作品!
我試着改變Closure的委託策略,但沒有幫助。
這是一個Groovy錯誤還是有辦法解決這個問題?
該死!這不適用於Groovy 2.4.5或2.4.7。 – Renato
您是否嘗試過[報告爲錯誤](https://issues.apache.org/jira/browse/GROOVY)? –
我不確定這是一個錯誤,或者這是特質應該如何工作。如果確實是一個錯誤,我可以報告。 – Renato