On Saturday 18 December 2010 23:01:30 doubleagent wrote:
> Andrei's quick dictionary illustration [in his book, 'The D Programming
> Language'] doesn't seem to work.  Code attached.
> 
> On my computer, with d2-0.5.0, I got the following output while testing.
> 
> andrei
> 0     andrei
>  andrei
> 1     andrei
> 
> 
> Also, why doesn't 'splitter' show up on the site's documentation of
> std.string?  And what advantage does 'splitter(strip(line))' offer over
> 'split(line)'?
> begin 644 dictionary.d
> M:6UP;W)T('-T9"YS=&1I;RP@<W1D+G-T<FEN9SL*"G9O:60@;6%I;b...@i('L*
> M"75I;G1;<W1R:6YG72!D:6-T:6]N87)Y.R`O+R!V6VM=+"!S;R!S=')I;F<M
> M/G5I;G0*"69O<F5A8V@@*&QI;F4[('-T9&EN+F)Y3&e...@i*2!["@D)+R\@
> M8G)E86L@<V5N=&5N8V4@:6YT;R!W;W)D<PH)"2\O($%D9"!E86-H('=O<F0@
> M:6...@=&AE('-E;G1E;F-E('1O('1H92!V;V-A8G5L87)Y"@D)9F]R96%C:"`H
> M=V]R9#L@<W!L:71T97(H<W1R:7`H;&EN92DI*2!["@D)"6EF("AW;W)D(&EN
> M(&1I8W1I;VYA<GDI(&-O;G1I;G5E.R`O+R!N;W1H:6YG('1O(&1O"@D)"6%U
> M=&\@;F5W260@/2!D:6-T:6]N87)Y+FQE;F=T:#L*"0D)9&EC=&EO;F%R>5MW
> M;W)D72`](&YE=TED.PH)"0EW<FET969L;b...@b)7-<="5S(BP@;F5W260L('=O
> .<F0I.PH)"7T*"7T*?0H`
> `
> end

Whatever you did to attach your code, it just comes up as gibberish to me. The 
errata page is here: http://erdani.com/tdpl/errata/index.php?title=Main_Page I 
have no idea what example you're looking at, or what the problem is. There are 
some examples in the book which are not 100% correct (most, if not all of them, 
are in the errata) and a few which don't work yet due to bugs in dmd or 
features 
which are not completely implemented yet (e.g. currently, you can only have one 
alias this per class/struct, but TDPL says that you can have multiple).

The reason that std.string.splitter() does not show in the documentation is 
that 
its return type is auto, and there is currently a bug in ddoc that makes it so 
that auto functions don't end up in the generated documentation. Looking at the 
code, it pretty much just forwards to std.algorithm.splitter() using whitespace 
as its separator, so you can look at the documentation there if you'd like.

Looking at the code for std.algorithm.splitter(), I'd say that the main 
advantage of splitter() over split() is that it generates a lazy range. So, if 
you don't want to process the whole range or if you don't want to use as much 
memory by having to duplicate the entire range that you passed to 
split()/splitter(), then you'd use splitter(). split() does have the advantage 
that it gives you an array, so you don't have to use std.array.array() if you 
want an array, like you'd have to do with splitter().
 
Overall, splitter() is more generic. split() is specific to std.string, and 
std.string has a version of splitte() presumably so that there is a version 
which matches up with split()'s behavior.

- Jonathan M Davis

Reply via email to