groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Søren Berg Glasius <>
Subject Re: "External" closures, why?
Date Tue, 01 Dec 2015 16:23:23 GMT
Hi Alessio,

It's not a problem to use the closure like this:

sql.eachRow('select * from PROJECT where name=:foo', [foo:'Gradle'], { 
  // process row 

it is simply a matter of how you place your parentesees 

When you use closures with collections you would offen omit the parentheses all together:

collection.each {
   // do something with it

but writing 

collection.each ({
   // do something with it

yields the same result, but is a tiny bit more verbose

Best regards / Med venlig hilsen,  
Søren Berg Glasius  

Hedevej 1, Gl. Rye, 8680 Ry, Denmark  
Mobile: +45 40 44 91 88, Skype: sbglasius  
--- Press ESC once to quit - twice to save the changes.

On December 1, 2015 at 17:19:07, alessio ( ) wrote:


I have just started to dig into Groovy and have been mostly impressed
by what it offers, however when I had a look at handling database
calls (
I stumbled upon a rather weird syntax

sql.eachRow('select * from PROJECT where name=:foo', [foo:'Gradle']) {
// process row

Usually I'd say this is a "regular" block scope but in this context it
was obviously a closure/function pointer/callback. It took me a while
to dig into this to find out that it can also be passed as second
argument to the method and was added in 2.2 (the JSR link does
not work anymore)

My question now is, why? Apparently pre-2.2 one had to cast the
closure to the appropriate type. But why making it possible to
actually define the closure outside of the respective call?

At least for me this is HIGHLY confusing.


View raw message