On Monday, 15 April 2013 at 17:07:22 UTC, Nick Sabalausky wrote:
On Mon, 15 Apr 2013 18:41:07 +0200
"Idan Arye" <generic...@gmail.com> wrote:
Having D's `switch` be an expression is problematic, since D
does not have the convention of
blocks-returning-the-value-of-the-last-statement, and since D
is statically typed - adding this might cause unwanted
implicit conversions.
Maybe it could be pulled off with a syntax similar to Scala:
switch(x){
case 1 => ...
case 2 => ...
}
Wouldn't it be possible to just simply choose between these two
forms
based on whether the switch is used where an expression is
expected
versus where a statement would be accepted?:
switch(cond) {
case 1: [...statements...] break;
...
}
vs
switch(cond) {
case 1: [...expression...];
...
}
Possible? probably. Simply? probably not. `switch` is already a
statement, so it will have to be added as an expression, but
expressions in D can be used as statements, so it could create an
ambiguity in the syntax parser - and those are seldom easy to
solve.
The `switch`+`=>` solution should be simpler, since it doesn't
create that ambiguity, but syntax additions are never that simple.
`predSwitch`, on the other hand, is dead simple.