了解groovy闭包

时间:2018-11-05 12:01:23

标签: groovy closures

我试图通过以下代码了解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如何获得ab的值

我已经阅读了有关Groovy闭包的信息,但实际上无法了解它的工作原理?

1 个答案:

答案 0 :(得分:0)

以下行定义了闭包DELEGATE_FIRST的属性和方法解析策略。这意味着要获取/设置/调用任何属性/方法,它将首先去delegate对象,而当没有这样的属性/方法时,它将去owner对象。

closure.resolveStrategy = Closure.DELEGATE_FIRST

,下一行将闭包的delegate对象设置为params

closure.delegate = params

最后,您的闭包仅设置了两个属性。以及在delegate对象上设置的那些属性(目前为param

{
    a=10
    b=20
}
相关问题