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."




Reply via email to