Thank you for good explanation.

But i currently hit little more complex case and again stuck, maybe some ideas how to resolve this, unfortunately compiler messages not very explanatory.

void main()
{
Variant[] lols = [ Variant(["hello": Variant(1)]), Variant(["bye": Variant(true)]) ];
    auto vtypes = map!(to!Variant[string])(lols); // <--- line 11
    string[] filetypes = map!(to!string)(vtypes).array();
    writeln(filetypes);
}

Gives me:
main.d(11) Error: to!(VariantN!(24u)) is used as a type


On Tuesday, 10 December 2013 at 06:05:50 UTC, Philippe Sigaud wrote:
On Tue, Dec 10, 2013 at 6:54 AM, Dfr <defle...@yandex.ru> wrote:
Hello, here is example code, which doesn't work:

    Variant[] vtypes = [ Variant("hello"), Variant("bye") ];
    string[] filetypes = map!(to!string)(vtypes);

Gives me error:

Error: cannot implicitly convert expression (map(vtypes)) of type
MapResult!(to, VariantN!(24u)[]) to string[]

What is wrong here and how to fix it ?

map, and with it most other algorithm and ranges in std.algorithm and std.range, returns lazy ranges: structs that will produce the data you
want when you iterate on them (with foreach, for example).

What map!(to!string)(someArray) does is constructing a 'view' on
someArray that will get you someArray elements, concerted into string.

If you want to convert it into an array, use std.array.array:

import std.stdio;
import std.algorithm;
import std.range;
import std.array;
import std.conv;
import std.variant;

void main()
{
Variant[] vtypes = [ Variant("hello"), Variant("bye"), Variant(3.1415) ];
    string[] filetypes = map!(to!string)(vtypes).array();
    writeln(filetypes);
}

Reply via email to