I've added Lockstep to std.range, which allows things like:

foreach(a, b; lockstep(range1, range2)) {
    // Loop body.
}

If anyone really doesn't like it, it can be removed, but I've **really** wanted this functionality for a **long** time.

I considered integrating it into Zip, but decided against this because:

1. DMD doesn't currently work properly in terms of overloading opApply-based foreach against range-based foreach, even when there is no ambiguity.

2. Even if this gets fixed, there will still be ugly ambiguous cases if iterating with Proxy and iterating as individual variables are put in the same struct once bug 3444 (http://d.puremagic.com/issues/show_bug.cgi?id=3444) gets fixed.

Using Zip for iterating in lockstep over ranges via foreach is just syntactically ugly enough that I never do it in practice. This is mostly because I can't name the element variables individually and have to access them as members of a Proxy. Zip has its place for things like sorting in lockstep, and I plan to improve/debug it, too, but I really felt that for simple foreach-based lockstep iteration, a separate struct was necessary.

On 8/15/2010 5:26 PM, dsource.org wrote:
phobos commit, revision 1871


user: dsimcha

msg:
Added Lockstep, hasLvalueElements.

http://www.dsource.org/projects/phobos/changeset/1871

_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos


_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to