I have some Java code that uses curly braces in two ways
// Curly braces attached to an 'if' statement:
if(node.getId() != null)
{
node.getId().apply(this);
}
// Curly braces by themselves:
{
List<PExp> copy = new ArrayList<PExp>(node.getArgs());
for(PExp e : copy)
{
e.apply(this);
}
}
outAMethodExp(node);
What do those stand-alone curly braces after the first if
statement mean?
As an interesting note: the braces actually enable a class of statements: declarations.
This is illegal:
if(a) int f;
but this is legal:
if(a) { int f; }
They define a new scope which means that everything declared in this scope is not visible outside the curly braces.
The only purpose of the extra braces is to provide scope-limit. The
List<PExp> copy
will only exist within those braces, and will have no scope outside of them.If this is generated code, I assume the code-generator does this so it can insert some code (such as this) without having to worry about how many times it has inserted a
List<PExp> copy
and without having to worry about possibly renaming the variables if this snippet is inserted into the same method more than once.I second what matt b wrote, and I'll add that another use I've seen of anonymous braces is to declare an implicit constructor in anonymous classes. For example:
Some unit-testing frameworks have taken this syntax to another level, which does allow some slick things which look totally uncompilable to work. Since they look unfamiliar, I am not such a big fan myself, but it is worthwhile to at least recognize what is going on if you run across this use.
I think they just define an unnamed level of scope.