On Monday, 10 August 2015 at 13:57:50 UTC, sigod wrote:
From docs:
The following part => AssignExpression is rewritten to
FunctionLiteralBody:
{ return AssignExpression ; }
So, I wonder what happens when curly braces already in place?
It does exactly what that says: rewrites it to
(a) {
return {
writeln(a);
};
}
which is returning a delegate.
This code compiles and doesn't output anything.
So your code passed a delegate that returned a delegate to each.
Since the one returned wasn't called, the writeln never happened.
If you call it like so:
[1,2,3,4,5]
.each!(a => {
writeln(a);
}()); // added parens call the returned delegate
then you see it.
The => thing in D is meant only for trivial, single line things.
If you want multiple lines, that's where the {} syntax comes in
with no need for the =>.
.each!( (a) {
writeln(a);
});