www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Correct use of map

reply "Dfr" <deflexor yandex.ru> writes:
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
Jan 03 2014
parent reply "bearophile" <bearophileHUGS lycos.com> writes:
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
Jan 03 2014
parent reply "Dfr" <deflexor yandex.ru> writes:
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__T5Tupl
TAyaTiZ5Tuple+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
Jan 03 2014
parent "monarch_dodra" <monarchdodra gmail.com> writes:
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;
Jan 04 2014