On Monday, 17 February 2014 at 20:03:32 UTC, Timon Gehr wrote:
On 02/17/2014 08:33 PM, simendsjo wrote:
On Monday, 17 February 2014 at 19:30:38 UTC, Timon Gehr wrote:
On 02/17/2014 08:22 PM, simendsjo wrote:
Should the following two uses be a compile-time error?
foreach(i; 10 .. 0) // Never executes
foreach(i; iota(10, 0)) // .. neither does this
I would like the second to either be a compile-time error or
automagically use a negative step.
So we need to use a negative step in iota() or use a for loop
foreach(i; iota(10, 0, -1)) // as expected
The parameters can be runtime values. Auto-magically using a
negative
step would hence be a bad idea.
Why would it be a bad idea?
The step direction shouldn't randomly change.
I wouldn't call it randomly. In that case you should call it
randomly that it suddenly doesn't run once you try to step
downward.
And I don't see where the runtime aspect comes in.
It was just to illustrate the issue more clearly. Eg. it means
one and the same iota expression can sometimes iterate in one
direction and in the other direction at other times. That's
simply not useful behaviour.
I'm not sure what I find more confusing. Ok if it's a deliberate
choice never to change the step direction, but is it deliberate
that it's not an error to have a greater lower bound than upper
bound? Or is this just the way it happened to be implemented?