On Monday, 9 December 2013 at 09:32:26 UTC, Dfr wrote:
What i trying to achieve in my current example is more succinct
code.
A coming from Perl and instead of writing:
if(some_complex_statement.here > 0) {
writefln("x is %s", some_long_expression.here);
}
I got used not to repeat complex statement, but use 'x' as
quick alias:
if((int x = some_complex_statement.here) > 0) {
writefln("x is %s", x);
}
Afaik, D has no StatementExpression, which means no declarations
inside expressions. However, there is an AssignExpression, so
assignment works, but requires the declaration before.
int x;
if((x = some_long_expression.here) > 0) {
writefln("x is %s", x);
}
The bad news is that this means type inference cannot be used
here (no "auto") and the variables is declared in a wider scope
than just the if-body.