On Friday, 21 February 2014 at 16:41:00 UTC, Regan Heath wrote:
and make this possible too:
foreach([index, ]value; range) { }
I understand the user interface is simple, but you created 3
statements about how it could be achieved and work/not work with
the existing setup. Each have their positives and negatives, it
would not make sense to "just choose one" and hope it all works
out.
if AA is changed to a double[string], then your value loop
iterates on keys and your key loop iterates on values.
No, I was actually suggesting a change here, the compiler would
use type matching not ordering to assign the variables. So
because 'v' is a string, it is bound to the value not the key.
And string is the key, double[string] is not the same as
string[double].
Also string[string], ambiguous yet common.
There are many things to consider when adding a feature, it is
not good to ignore what can go wrong.
Thanks! Ok, so how is this working? ahh, ok I think I get it.
enumerate returns a range, whose values are Tuples of
index/value where value is also a tuple so is flattened, and
then the whole lot is flattened into the foreach.
Sounds like you understand it, seams foreach will flatten all
tuples.
I don't think this affects what I actually want to change, we
can have:
foreach(index, value; range) { }
and still flatten tuples into value, you would simply have to
provide one extra variable to get an index.
Make sense?
Yes, but I'm saying we don't need it because
foreach(index, value; range.enumerate) { }
is good enough. Not perfect, but good enough.