Gradle/Groovy 语法混乱

The*_*lis 4 groovy gradle

谁能解释/评论这部分 Groovy 代码?

\n\n
task copyImageFolders(type: Copy) {\n    from(\'images\') {\n        include \'*.jpg\'\n        into \'jpeg\'\n    }\n\n    from(\'images\') {\n        include \'*.gif\'\n        into \'gif\'\n    }\n\n    into \'build\'\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

更具体地了解from 方法。\n这是

\n\n
from(sourcePaths)\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
from(sourcePath, configureAction)\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果它有 2 个参数,为什么它\xe2\x80\x99 是这样写的,而不是这样的:

\n\n
 from(\'images\', {\n     include \'*.jpg\'\n     into \'jpeg\'\n })\n
Run Code Online (Sandbox Code Playgroud)\n

小智 5

简短的回答是它在召唤from(sourcePath, configureAction)

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

是一篇很好的博客文章,解释了将闭包传递给 Groovy 中的方法的不同方式(如果您需要更多示例),并且提供了更多可选括号的示例。


ToY*_*nos 5

这是语法糖,使内容更容易阅读(对于 Gradle 配置非常有用)

\n\n

在这种情况下,一切都与括号有关有关。

\n\n
\n

当闭包是方法调用的最后一个参数时,例如使用 Groovy\xe2\x80\x99seach{} 迭代机制时,您可以将闭包放在右括号之外,甚至可以省略括号:

\n
\n\n
list.each( { println it } )\nlist.each(){ println it }\nlist.each  { println it }\n
Run Code Online (Sandbox Code Playgroud)\n\n

就您而言,以下一切工作正常:

\n\n
from(\'images\', {\n    include \'*.jpg\'\n    into \'jpeg\'\n})\n\nfrom(\'images\') {\n    include \'*.gif\'\n    into \'gif\'\n}\n\nfrom \'images\', {\n    include \'*.gif\'\n    into \'gif\'\n}\n
Run Code Online (Sandbox Code Playgroud)\n

  • 我是唯一一个发现如此大量的语法选项__更难__阅读的人吗? (2认同)