On Wednesday, August 17, 2011 10:27 Vijay Nayar wrote: > D adds a very handy feature that allows you to check for a range of > values in a single case. Is there a particular reason that the syntax > "case <start>: .. case <end>:" is used instead of treating the case > statement similarly to an array slice, e.g. "case <start> .. <end>:"? > > For example: > > import std.stdio; > > void main() { > int bob = 12; > switch (bob) { > // Why not "case 0 .. 9:"? > case 0: .. case 9: > writeln("Less than 10."); > case 10: .. case 19: > writeln("Less than 20."); > case 20: .. case 29: > writeln("Less than 30."); > break; > default: > break; > } > // Output: Less than 20. Less than 30. > }
I don't know, but ranged case statements don't have the same semantics as giving a range of values when slicing or to a foreach loop, so that may be why. arr[0 .. 10] does _not_ include the element at index 10. case 0: case 10: _does_ include 10. So, it actually probably be a bad thing for them to use the same syntax. To use the same syntax for both would make the semantics of that syntax inconsistent and confusing. - Jonathan M Davis