> On 12 Oct 2015, at 14:26, Esteban Lorenzano <[email protected]> wrote: > > Hi, > > I just spotted this: > > > Integer>>#putOn: aStream > > (aStream isBinary ifTrue: [ self asByteArray ] ifFalse: [ self > asString]) putOn: aStream
IMO, this is not good, implicit (and inefficient) conversions are being done. Why ? What is the exact contract of #putOn: anyway ? If the result should really depend on the argument, double dispatch might be better. > It does not look so bad at the begining, but… if I do: > > ByteArray streamContents: [ :s | 42 putOn: s ] > > I got an infinite loop. > > I know, it does not look as a very typical case, but… if I’m writing to a > Socket and I want to use > > mySocket << 255 “IAC”, that’s exactly what will happen :( > > If I redefine it as: > > Integer>>#putOn: aStream > aStream isBinary ifFalse: [ > self asString putOn: aStream. > ^ self ]. > self asByteArray do: [ :each | aStream nextPut: each ] > > then is ok… > > Would that be a good change? Yeah that looks about right, still weird, but no weirder than before ;-) > Esteban
