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