can't zip a char[5], string[5], real[5]

Jonathan M Davis via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Oct 21 08:20:11 PDT 2015


On Wednesday, October 21, 2015 14:11:20 anonymous via Digitalmars-d-learn wrote:
> On Wednesday, 21 October 2015 at 14:06:54 UTC, Shriramana Sharma
> wrote:
> > import std.stdio, std.range;
> > void mywrite(char [5] chars, real[5] vals)
> > {
> >     static string [5] fmts = ["%9.4f, ", "%9.4f; ", "%3d, ",
> > "%3d, ",
> > "%3d\n"];
> >     foreach (e; zip(chars, fmts, vals)) write(e[0], " = ",
> > e[1].format(e[2]));
> > }
> >
> > Compiling gives:
> [...]
> > I would have thought there would be no problem in creating a
> > zip of three arrays of equal length. What's the problem here?
>
> Static arrays are not ranges. You can't popFront them. Try
> slicing them: chars[], fmts[], vals[]

Though when you do that, be careful that you don't keep the dynamic arrays
(or any other ranges created from them) around longer than the static
arrays; otherwise, the dynamic arrays will then be referring to invalid
memory, and nasty things will happen...

But as long as the dynamic arrays don't exist longer than the static ones
that they refer to, then you're fine.

- Jonathan M Davis



More information about the Digitalmars-d-learn mailing list