Am 29.09.2008 um 09:52 schrieb Claus Kick:
Bert Freudenberg wrote:
Am 28.09.2008 um 09:52 schrieb Randal L. Schwartz:
aString collect: [:char | char xmlEscaped].
I had actually in mind to do it this way - but I thought the do:[]
is easier to read. Runtime performance is always step 2 for me.
Internally, that uses a Stream, which extends itself nicely as
new data
appears.
It does not use a Stream, #collect: knows the size of the collection
in advance, it's the same as the original one.
You were probably thinking of something like
^String streamContents: [:strm | aString do: [:c | sstrm nextPutAll:
char xmlEscaped]]
In some images there is #gather: which does this more concisely but
unfortunately uses Array instead of "self species" so it would not
work with Strings.
In your version, the early string data is getting repeatedly
copied
to make each new string. Ouch.
That may be, my Squeak is rusty (VW these days).
I'm pretty certain it would be the same in VW because #, has to copy
(unless you apply serious amounts of magic).
Err, #collect: constructs a string character by character, not
from other strings. Double-ouch ;)
So, the gist is - whether you do do:[] or collect:[] doesnt matter
much?
Well, #collect: is much more readable and concise, and might be
optimized for some sorts of collections.
In general it's good practice to use the most specific iteration
method available rather than emulating using #do: (and always think
twice, no, three times before using #to:do:).
- Bert -
_______________________________________________
Beginners mailing list
Beginners@lists.squeakfoundation.org
http://lists.squeakfoundation.org/mailman/listinfo/beginners