Codeblocks are an important part of the X# language.
Traditionally, the codeblock looked as follows:
codeblock : { | codeblockParamList? | expression }
;
codeblockParamList : identifier (, identifier)*
;
For example:
{|a,b| a*b}
X# has extended the Codeblock rule. We now not only accept a single expression, but also a statement list and an expression list:
codeblock : { | codeblockParamList? |
( expression
| eos statementblock
| codeblockExpressionList )
}
;
codeblockExprList : (expression? ,)+ expression // The last expression is the return value of the block
;
Examples of this are:
{|a,b| a:= Sqrt(a), a*b}
{|a,b|
? a
? b
}
The second example can be seen as an anonymous method with 2 parameters.