string comparison

Jonathan M Davis jmdavisProg at gmx.com
Sun Dec 19 22:10:47 PST 2010


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 at 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&EN92 at I*2!["@D)+R\@
> M8G)E86L@<V5N=&5N8V4@:6YT;R!W;W)D<PH)"2\O($%D9"!E86-H('=O<F0@
> M:6X@=&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 at 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


More information about the Digitalmars-d-learn mailing list