Groovy每个方法/闭包

Groovy每个方法/闭包,groovy,closures,Groovy,Closures,使用 teams.each(){ team-> //iterate through each team } 及 请注意,在第一个括号中,每个括号后面和封口之前都有一个括号。我们在应用程序上做了一些负载测试,发现当我们使用第一个应用程序时,有一些线程正在等待这个调用。但在第二种情况下,一切都很顺利 我很想知道这里有什么不同。没什么,它们是一样的。在Groovy中,如果函数的最后一个参数是闭包,那么它可能出现在大括号之外,例如: [1,2,3].inject( 0 ) { acc, it -

使用

teams.each(){ team->
//iterate through each team
}

请注意,在第一个括号中,每个括号后面和封口之前都有一个括号。我们在应用程序上做了一些负载测试,发现当我们使用第一个应用程序时,有一些线程正在等待这个调用。但在第二种情况下,一切都很顺利


我很想知道这里有什么不同。

没什么,它们是一样的。在Groovy中,如果函数的最后一个参数是闭包,那么它可能出现在大括号之外,例如:

[1,2,3].inject( 0 ) { acc, it -> acc + it }


都是一样的。编写groovy的通常方法是省略示例中的大括号,或者在上面的
inject
示例中将闭包放在大括号之外。什么都没有,它们是一样的。在Groovy中,如果函数的最后一个参数是闭包,那么它可能出现在大括号之外,例如:

[1,2,3].inject( 0 ) { acc, it -> acc + it }


都是一样的。编写groovy的通常方法是省略示例中的大括号,或者将闭包放在上面的
inject
示例中的大括号之外,因为它们都是相同的。你能举例说明你所说的“块线程”是什么意思吗?也许可以把它加到你的问题上?蒂姆的答案是正确的。如果使用groovyc编译两个groovy脚本(一个有一个没有parens),那么将为这两个脚本生成类文件。如果您通过
javap-c
运行它们来查看生成的字节码,您将看到两者之间没有区别(除了脚本名称和一些时间戳)。它们通过完全相同的代码路径。OP在其负载测试运行中肯定有其他一些不同之处。Ya。这不是原因。最后,我们发现是来自闭包的一个调用导致了这个bug-@DhanushGopinath,因为它们都是相同的。你能举例说明你所说的“块线程”是什么意思吗?也许可以把它加到你的问题上?蒂姆的答案是正确的。如果使用groovyc编译两个groovy脚本(一个有一个没有parens),那么将为这两个脚本生成类文件。如果您通过
javap-c
运行它们来查看生成的字节码,您将看到两者之间没有区别(除了脚本名称和一些时间戳)。它们通过完全相同的代码路径。OP在其负载测试运行中肯定有其他一些不同之处。Ya。这不是原因。最终发现是闭包调用导致了错误-
[1,2,3].inject( 0, { acc, it-> acc + it } )