Hi sven

what I do not really with asString is that it potentially created another stream.
with << the implementation of camillo (if I remember correctly) manages correctly both 
single object and collection and it is nice to have. I do not know if his implementation
does not create additional stream.

Stef


On 15 Feb 2019, at 10:25, Sven Van Caekenberghe <sven@stfx.eu> wrote:

Hi Jan,

I like #<< too, but I think your assumption that it can print anything on a stream is generally wrong, dangerous and unreliable.

IMHO, you better stick to #print: in that case.

Consider the follow, that all fail:

String streamContents: [ :s | s << 'hello' << 42.5 << $! ].

String streamContents: [ :s | s << 'hello' << (1@2) << $! ].

In other words: #<< works in bizar ways (check the implementors of #putOn:).

I would be inclined to change

ZnEncodedStream>>#<< collection
^ self nextPutAll: collection

to

ZnEncodedStream>>#<< collection
^ self nextPutAll: collection asString

but it would technically not be the same as the original #<< for in-memory streams.

Opinions ?

Sven

On 15 Feb 2019, at 09:52, Jan Blizni��enko <jan.bliznicenko@fit.cvut.cz> wrote:

Hello everyone

I am trying to use Pharo 7 for my project and I noticed that most of my
streams related code does not work anymore. Reason is that API for streams
received from writeStream of FileReference changed and I think it changed
for the worse in my case, because << does not properly handle any other
objects than strings anymore.

In both Pharo 6 and 7 I can write
String streamContents: [ :s | s << 'hello' << 42 << $! ].
and get 'hello42!'.
I can write in Pharo 6 but cannot in Pharo 7
'hello.txt' asFileReference writeStreamDo: [ :s | s << 'hello' << 42 << $! ]
In Pharo 6, I get same result in both examples (written to the file in
second case of course), but in Pharo 7, the second example results in
exception because << does not work with anything other than strings, so it
seems I have to manually convert everything to strings.

This change to streams seems to me like a setback for 2 reasons:
1) API amongst streams is no longer consistent in this case
2) streams for files lost useful functionality and to make my project
compatible with Pharo 7, I have to make lots of effort to make my code
uglier and longer

I would like to ask for the reason of this change and whether is there
anything that can be done with it. Or do I just misuse or misunderstand
anything? Thank you.

Best regards,
Jan



--
Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html