Hi Stef, Just a clarification. I do not argue here. I just explain what I see. I think it was like this since a long time. I even checked in an old VW I have around and it seems to have the same behavior.
But, I do agree that it is not straightforward at all. It took me a while to figure this out and it is still confusing sometimes. In fact, this is why we have a String presentation in the String object - I needed something that clarifies situations like these. That does not mean it is the best solution :). > On Feb 19, 2017, at 11:42 AM, stepharong <stephar...@free.fr> wrote: > > On Sun, 19 Feb 2017 11:40:04 +0100, Sven Van Caekenberghe <s...@stfx.eu> > wrote: > >> Ah, you're right: there is a difference between printing a textual >> representation on a stream / window and doing the same with the actual >> (print)string. I was not yet fully awake I guess. > > So > 'comics' > >>> comics whatever it means > but > (#AAA asClass new name: 'comics') > >>> ‘comics' It’s the other way around :). Example A: 'comics' >>print it>> ‘comics’ In this case we have a string object and we send printString to it which in String>>storeOn: adds the quotes as part of the contents of the new string. Example B: (#AAA asClass new name: 'comics') >>print it>> comics Here we have an non-string object and we sent printString to it which creates a string with the contents of the stream. As no String>>storeOn: is invoked in this case, there are no quotes. So, the two resulting print it strings do not have the same contents. Maybe another case: Example C: (#AAA asClass new name: 'comics’) printString >>print it>> ‘comics’ This is equivalent to Example A. We send printString to a string object and we get the quotes. The issue is that when we send printString to a string, we produce a new string with escaped quotes: 'comics' = (String streamContents: [:s | s << 'comics’]) contents. "true" 'comics' = (String streamContents: [:s | s << 'comics']) contents printString. "false" > I'm sorry but I do not get it at all. > Especially since we always wrote that printIt is sending printString. > I find that totally broken and I do not understand why this is good. Another thing to keep in mind is: Example D: Object new >>print it>> an Object This is essentially equivalent with Example A If Example B would produce >>print it>> ‘comics’ it would mean that Example D would produce >>print it>> ‘an Object’ Ugh, I already got dizzy with so many quotes :). One problem is that when you look at a string, you do not know how many String>>storeOn: commands it went through. So, here is an idea: what if String>>printString would produce a EscapedString, which behaves like an operator? In this case, we would see better how many levels of String>>storeOn: are being displayed. What do you think? Cheers, Doru > Stef > > > > >> >>> On 19 Feb 2017, at 10:59, Tudor Girba <tu...@tudorgirba.com> wrote: >>> >>> Hi, >>> >>> Hmm, I think I do not see it :). >>> >>> Let’s take it slowly. From what I see, the behavior is the same since at >>> least Pharo 3. >>> >>> Here is a script that seems to reproduce your situation: >>> >>> Object subclass: #AAA >>> instanceVariableNames: 'name' >>> classVariableNames: '' >>> package: 'AAA'. >>> #AAA asClass compile: 'printOn: aStream >>> aStream << name'. >>> #AAA asClass compile: 'name: aString >>> name := aString'. >>> #AAA asClass new name: 'comics' >>> >>> In Pharo 6, we have in a Playground: >>> >>> <Screen Shot 2017-02-19 at 10.48.55 AM.png> >>> >>> In Pharo 3, we have this in a Workspace: >>> >>> <Screen Shot 2017-02-19 at 10.49.26 AM.png> >>> >>> Calling Print It on an object produces a string out of the contents of the >>> stream, and displaying it shows the contents of the stream (so, no quotes). >>> Calling Print It on a string produces a string of the string, and >>> displaying it shows the quotes of the first string. >>> >>> You can see this in the String tab of the inspector: >>> >>> <p1.png> >>> >>> >>> <p2.png> >>> >>> Does this make sense? >>> >>> I think this is not inconsistent, but maybe there is a better way. In any >>> case, the behavior seems to exist since a long time. >>> >>> Cheers, >>> Doru >>> >>> >>>> On Feb 19, 2017, at 9:06 AM, stepharong <stephar...@free.fr> wrote: >>>> >>>> Hi doru >>>> >>>> may be I do not see the obvious. >>>> I defined a class >>>> >>>> Object subclass: #MFElement >>>> instanceVariableNames: 'name parent' >>>> classVariableNames: '' >>>> package: 'MyFS2' >>>> >>>> printOn: aStream >>>> parent isNil ifFalse: [ parent printOn: aStream ]. >>>> aStream << name >>>> >>>> name: aString >>>> name := aString >>>> >>>> >>>> MFDirectory new name: 'comics'. >>>> >>>> >>>> And when I do >>>> >>>> >>>> (MFDirectory new name: 'comics') >>>> comics/ >>>> >>>> >>>> (MFDirectory new name: 'comics') printString >>>>>>> 'comics/' >>>> >>>> >>>> Hi Stef, >>>> >>>> I think I do not understand the issue. >>>> >>>> Here is the screenshot of a Playground. >>>> >>>> ‘comics’ -> print-it -> ‘comics' >>>> >>>> <Mail Attachment.png> >>>> >>>> What am I missing? >>>> >>>> Cheers, >>>> Doru >>>> >>>> >>>>> On Feb 18, 2017, at 6:26 PM, stepharong <stephar...@free.fr> wrote: >>>>> >>>>> >>>>> Hi guys >>>>> >>>>> I'm working on an introduction chapter for my future book and I do not >>>>> like the behavior I see in latest pharo 60. >>>>> >>>>> And I do not understand the behavior of print-it >>>>> >>>>> (MFDirectory new name: 'comics') >>>>> comics/ >>>>> >>>>> >>>>> (MFDirectory new name: 'comics') printString >>>>>>>> 'comics/' >>>>> >>>>> >>>>> Why print it does not produce ''? >>>>> >>>>> >>>>> Stef >>>>> >>>>> >>>>> printIt >>>>> "Treat the current text selection as an expression; evaluate it. Insert >>>>> the >>>>> description of the result of evaluation after the selection and then >>>>> make >>>>> this description the new text selection." >>>>> >>>>> | printString | >>>>> self >>>>> evaluateSelectionAndDo: [ :result | >>>>> printString := [ result printString ] >>>>> on: Error >>>>> do: [ '<error in printString: try ''Inspect >>>>> it'' to debug>' ]. >>>>> self afterSelectionInsertAndSelect: printString ] >>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Using Opera's mail client: http://www.opera.com/mail/ >>>>> >>>> >>>> -- >>>> www.tudorgirba.com >>>> www.feenk.com >>>> >>>> "It's not how it is, it is how we see it." >>>> >>>> >>>> >>>> >>>> -- >>>> Using Opera's mail client: http://www.opera.com/mail/ >>>> <MFElement.st> >>> >>> -- >>> www.tudorgirba.com >>> www.feenk.com >>> >>> "Problem solving should be focused on describing >>> the problem in a way that makes the solution obvious." >>> >>> >>> >>> >>> >> > > > -- > Using Opera's mail client: http://www.opera.com/mail/ -- www.tudorgirba.com www.feenk.com "From an abstract enough point of view, any two things are similar."