对象定义或方法调用?

时间:2015-01-25 07:54:28

标签: groovy gradle

documentation/section 14.4中,我遇到了以下代码示例:

task configure << {
    def pos = configure(new java.text.FieldPosition(10)) {
        beginIndex = 1
        endIndex = 5
    }
    println pos.beginIndex
    println pos.endIndex
}

posconfigure的含义并不十分清楚。我认为configure只是一个属性,所以我们可以编写像

这样的东西
println configure.beginIndex

但该行会导致编译时错误。和

{
    beginIndex = 1
    endIndex = 5
}

只是一个闭包,是吗?

1 个答案:

答案 0 :(得分:1)

configure()是gradle Project对象的a method。该方法的文档解释了它的作用:

  

对象配置(Object object,Closure configureClosure)

     

通过闭包配置对象,并将闭包的委托设置为提供的对象。这样您就不必多次指定配置语句的上下文。

     

而不是:

MyType myType = new MyType()
myType.doThis()
myType.doThat()
     

你可以这样做:

MyType myType = configure(new MyType()) {
    doThis()
    doThat()
}

因此,手动代码段定义了FieldPosition类型的对象,将其分配给变量pos,使用闭包设置其beginIndexendIndex属性,这要归功于Project的configure()方法,然后打印这些属性。

这是一个毫无意义的示例,展示了如何使用gradle DSL配置对象的多个属性。