省略括号的Groovy函数调用

省略括号的Groovy函数调用,groovy,gradle,Groovy,Gradle,根据,我们可以在方法调用中省略括号: 括号对于方法调用是可选的 但是当我们尝试应用java插件时,它似乎不起作用。如果脚本包含以下行: apply [plugin: 'java'] 我们将得到错误: Maybe something should be set in parentheses or a comma is missing? @ line 1, column 8. apply [plugin: 'java'] ^ 但是如果我们把这个Map-lit

根据,我们可以在方法调用中省略括号:

括号对于方法调用是可选的

但是当我们尝试应用java插件时,它似乎不起作用。如果脚本包含以下行:

apply [plugin: 'java']
我们将得到错误:

 Maybe something should be set in parentheses or a comma is missing?
 @ line 1, column 8.
     apply [plugin: 'java']
            ^
但是如果我们把这个
Map
-literal放在括号中,它就可以正常工作了

apply([plugin: 'java'])

因此,当参数是
映射时,我们不能省略括号,可以吗?

正如规范所说,当没有歧义时,可以省略括号。我怀疑这种情况下出现的歧义是因为不带括号的语句看起来很像数组索引语法,并且解析器很难确定您是在调用名为“apply”的方法还是试图对名为“apply”的数组执行某些操作


就我个人而言,这就是为什么我总是使用括号的原因——如果解析器不能解决这个问题,我相信其他阅读代码的程序员也不会这样做。

在这种特殊情况下
apply plugin:'java'
可以在没有方括号的情况下工作。像这样的“命名参数”会自动打包到映射中。关于
方法括号值括号
:“如果解析器不能解决它,我相信另一个读代码的程序员也不会解决它。”——这是一个完美的总结