Groovy @ symbol before fields

It allows you to override groovy's use of property accessors. If you write:

println u.name

groovy will invoke the automatically generated getter Person.getName(). If you write:

println u.@name

it will go directly to the field like it would in Java. In the case of the closure, it seems to have a first field but not a corresponding getFirst accessor.

In the groovy manual, it's documented as the direct field access operator.


It means you're accessing a field directly, rather than going through a getter.

See the Groovy operator docs, although there isn't much more to say. Other than probably avoid it.

The reason it fails for a ComposedClosure is because there's no getter for first (or second).