Thread overview
Correct use of map
Jan 03, 2014
Dfr
Jan 03, 2014
bearophile
Jan 04, 2014
Dfr
Jan 04, 2014
monarch_dodra
January 03, 2014
Here is few code eaxamples, i don't know why it is doesn't work as expected.

Here i want to transform string into list of tuples split by character:

auto nameparts = splitter("go.home", '.').map!(v => tuple(v,0)).array;

This gives me not very useful message about assert and stuff:
core.exception.AssertError@std.algorithm(1942): Assertion failure

January 03, 2014
Dfr:

> Here is few code eaxamples, i don't know why it is doesn't work as expected.
>
> Here i want to transform string into list of tuples split by character:
>
> auto nameparts = splitter("go.home", '.').map!(v => tuple(v,0)).array;
>
> This gives me not very useful message about assert and stuff:
> core.exception.AssertError@std.algorithm(1942): Assertion failure

It works for me:


void main() {
    import std.stdio, std.algorithm, std.typecons, std.range;

    auto nameParts = "go.home"
                     .splitter('.')
                     .map!(v => tuple(v, 0))
                     .array;

    nameParts.writeln;
}


Output:

[Tuple!(string, int)("go", 0), Tuple!(string, int)("home", 0)]

I am using dmd 2.065alpha on Windows.

Bye,
bearophile
January 04, 2014
Thank you fo reply, i'm using DMD32 D Compiler v2.064
Tried to copy/paste your code and here is full message what it prints:

core.exception.AssertError@std.algorithm(1942): Assertion failure
----------------
t(_d_assertm+0x16) [0x807d326]
t() [0x808123a]
t(pure nothrow @trusted void std.algorithm.swap!(std.typecons.Tuple!(immutable(char)[], int).Tuple).swap(ref std.typecons.Tuple!(immutable(char)[], int).Tuple, ref std.typecons.Tuple!(immutable(char)[], int).Tuple)+0x59) [0x8079de1]
t(pure nothrow @safe void std.typecons.Tuple!(immutable(char)[], int).Tuple.opAssign!(std.typecons.Tuple!(immutable(char)[], int).Tuple).opAssign(std.typecons.Tuple!(immutable(char)[], int).Tuple)+0x3c) [0x807958c]
t(pure nothrow @safe void std.array.Appender!(std.typecons.Tuple!(immutable(char)[], int).Tuple[]).Appender.put!(std.typecons.Tuple!(immutable(char)[], int).Tuple).put(std.typecons.Tuple!(immutable(char)[], int).Tuple)+0x8e) [0x8079cde]
t(_D3std5array118__T5arrayTSmain90__T9MapResultS14main9__lambda1TS3std9algorithm19__T8splitterTAyaTaZ8splitterFAyaaZ6ResultZ9MapResultZ5arrayFSmain90__T9MapResultS14main9__lambda1TS3std9algorithm19__T8splitterTAyaTaZ8splitterFAyaaZ6ResultZ9MapResultZAS3std8typecons16__T5TupleTAyaTiZ5Tuple+0x46) [0x8079666]
t(_Dmain+0x50) [0x8074a20]
t(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll().void __lambda1()+0x10) [0x807e5d8]
t(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate())+0x18) [0x807e550]
t(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll()+0x27) [0x807e59f]
t(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate())+0x18) [0x807e550]
t(_d_run_main+0x117) [0x807e4e7]
t(main+0x14) [0x807ab3c]
/lib/libc.so.6(__libc_start_main+0xf5) [0x45003865]
----------------



On Friday, 3 January 2014 at 20:07:34 UTC, bearophile wrote:
> Dfr:
>
>> Here is few code eaxamples, i don't know why it is doesn't work as expected.
>>
>> Here i want to transform string into list of tuples split by character:
>>
>> auto nameparts = splitter("go.home", '.').map!(v => tuple(v,0)).array;
>>
>> This gives me not very useful message about assert and stuff:
>> core.exception.AssertError@std.algorithm(1942): Assertion failure
>
> It works for me:
>
>
> void main() {
>     import std.stdio, std.algorithm, std.typecons, std.range;
>
>     auto nameParts = "go.home"
>                      .splitter('.')
>                      .map!(v => tuple(v, 0))
>                      .array;
>
>     nameParts.writeln;
> }
>
>
> Output:
>
> [Tuple!(string, int)("go", 0), Tuple!(string, int)("home", 0)]
>
> I am using dmd 2.065alpha on Windows.
>
> Bye,
> bearophile

January 04, 2014
On Saturday, 4 January 2014 at 07:57:04 UTC, Dfr wrote:
> Thank you fo reply, i'm using DMD32 D Compiler v2.064
> Tried to copy/paste your code and here is full message what it prints:

Hi Dfr. It's a known (and fixed) bug.

If you need to workaround it, you can use a named struct instead, something like:

struct TSI{string s; int i;}
auto nameparts = splitter("go.home", '.').map!(v =>
TSI(v,0)).array;