On Wednesday, 25 May 2016 at 19:07:32 UTC, Era Scarecrow wrote:
On Wednesday, 25 May 2016 at 13:27:28 UTC, Chris wrote:
Why can the tuple be iterated with foreach, as in my quick
fix, and indexed with tuple[0..], but is not accepted as a
range? What are the differences? Is there a way to rangify a
tuple?
The tuple is identified/used at compile-time, as such it's a
compiler primitive and not a range. Foreach in this case will
unroll the loop regardless how it looks. So...
test(Args...)(Args args) {
...
foreach (const ref i; items)
itemstrings ~= i.to!string;
Will become: (const and ref are pointless in this example,
unless the args are referenced)
test(int arg1, int arg2, int arg3, int arg4) {
...
itemstrings ~= arg1.to!string;
itemstrings ~= arg2.to!string;
itemstrings ~= arg3.to!string;
itemstrings ~= arg4.to!string;
Trying to use map on it was literally expanding the entire
input to map.
Ah, I didn't know that it was just unrolled. That makes sense, of
course.
[snip]