Gradle / Groovy语法混乱

时间:2018-04-24 08:04:18

标签: gradle groovy

任何人都可以解释/评论这部分Groovy代码吗?

task copyImageFolders(type: Copy) {
    from('images') {
        include '*.jpg'
        into 'jpeg'
    }

    from('images') {
        include '*.gif'
        into 'gif'
    }

    into 'build'
}

更具体地说是from method。 这是

from(sourcePaths)

from(sourcePath, configureAction)

如果它是带有2个参数的那个,为什么它以这种方式编写而不是像:

 from('images', {
     include '*.jpg'
     into 'jpeg'
 })

2 个答案:

答案 0 :(得分:3)

简短的回答是它正在呼叫from(sourcePath, configureAction)

Groovy在许多情况下都有可选括号,并且在括号外接受最后一个参数(如果它是一个闭包),在这种情况下,这是你传递给from()的闭包。

This是一篇很好的博客文章,解释了如果你想要更多的例子,可以将闭包传递给Groovy中的方法的不同方法,this提供更多可选括号的例子。

答案 1 :(得分:2)

它的Syntactic Sugar,使事情更容易阅读(对于Gradle配置非常有用)

在这种情况下,所有关于parentheses

  

当闭包是方法调用的最后一个参数时,就像使用时一样   Groovy的每个{}迭代机制,你可以把闭包放在外面   结束括号,甚至省略括号:

list.each( { println it } )
list.each(){ println it }
list.each  { println it }

在您的情况下,以下所有内容都正常运行:

from('images', {
    include '*.jpg'
    into 'jpeg'
})

from('images') {
    include '*.gif'
    into 'gif'
}

from 'images', {
    include '*.gif'
    into 'gif'
}