Hello Andrei,

I was coding a simple Euclidean distance function with limit:

double euclideanDistance(Range)(Range a, Range b, double limit)
{
limit *= limit;
double result = 0;
for (; !a.empty; a.next, b.next)
{
enforce(!b.empty);
auto t = a.head - b.head;
result += t * t;
if (result >= limit) goto thatsit;
}
enforce(b.empty);
thatsit:
return sqrt(result);
}
How would an elegant goto-less approach look like? It should not
duplicate code, e.g. the call to sqrt.

Andrei


I think this is a good reason for more scope(*) versions

you could fake it with

for (; !a.empty; a.next || (enforce(b.empty), false), b.next)


Reply via email to