What is the desired behavior of Stream>>write:?
The implementation is:
Stream>>write:encodedObject ^ encodedObject putOn:self.
and there are 2 implementors of #putOn:
Object>>putOn:aStream ^ aStream nextPut:self.
String>>putOn:aStream ^ aStream nextPutAll: self.
Is there a need for such a method?
Now, if I look at some of the senders, I find:
Bitmap>>printOnStream: aStream aStream print: 'a Bitmap of length '; write: self size.
Color:byteEncode: aStream aStream print: '('; print: self class name; print: ' r: '; write: (self red roundTo: 0.001);
Rectangle>>propertyListOn: aStream aStream print:'{ x='; write:origin x;
In nearly all the senders, a number is passed to #write:. But if it's a number, then #nextPut: will be sent to the stream with the number as argument. And if you have a stream of characters, as it is the case here because strings are printed to the stream, you can't write numbers directly.
Try: stream := ReadWriteStream on: String new.
Color red byteEncode: stream. Bitmap allInstances anyOne printOnStream: stream.
it will fail on 3.7, 3.8 and 3.9.
What is the real aim of #write: and how is it different from #print:?
squeak-dev@lists.squeakfoundation.org