我试图通过以下代码了解Groovy闭包的解析方式,
foo {
a=10
b=20
}
def foo(Closure closure) {
def params = [:]
closure.resolveStrategy = Closure.DELEGATE_FIRST
closure.delegate = params
closure()
println params.a
println params.b
}
在foo的实现中,永远不会将值分配给params
,然后params
如何获得a
和b
的值
我已经阅读了有关Groovy闭包的信息,但实际上无法了解它的工作原理?
答案 0 :(得分:0)
以下行定义了闭包DELEGATE_FIRST的属性和方法解析策略。这意味着要获取/设置/调用任何属性/方法,它将首先去delegate
对象,而当没有这样的属性/方法时,它将去owner
对象。
closure.resolveStrategy = Closure.DELEGATE_FIRST
,下一行将闭包的delegate
对象设置为params
closure.delegate = params
最后,您的闭包仅设置了两个属性。以及在delegate
对象上设置的那些属性(目前为param
)
{
a=10
b=20
}