Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

What is a Closure?

A Groovy closure is like a "code block" or a method pointer. It is a piece of code that is defined and then executed at a later point.

Simple Example

Note that in the above example, "hello!" is printed when the closure is called, not when it is defined.

Closures may be "bound" to variables within the scope where they are defined:


Closure parameters are listed before the -> token, like so:

The -> token is optional and may be omitted if your closure definition takes fewer than two parameters.

A closure without -> , i.e. {} , is a closure with one argument, implicitly named as 'it'. (see the next section for details) In many cases, you need to construct a closure with zero arguments, e.g. using GString for templating, defining EMC Property etc. You have to explicity define your closure as

Unknown macro: { -> }

Implicit variables

Within a closure, several variables are defined that have special meaning:


If you have a closure that takes a single argument, you may omit the parameter definition of the closure, like so:

this, owner, and delegate

this : as in Java, this refers to the enclosing class where a Closure is defined
owner : the enclosing object (this or a surrounding closure)
delegate : by default the same as owner, but changeable for example in a builder or ExpandoMetaClass


Closures as Method Arguments

When a method takes a closure as the last parameter, you can define the closure inline, like so:

In the above example, the collect method accepts a List and a Closure argument. The same could be accomplished like so (although it is more verbose):

More Information

Groovy extends java.lang.Object with a number of methods that accept closures as arguments. See GDK Extensions to Object for practical uses of closures.

See Also:

  • No labels