Hi sven
I think that I will have to hack my own, I was just surprised that we do not
have a nice way back
from tokens back to code. (not talking about quote inside strings).
String streamContents: [ :s |
#('self' 'classVariables:' ${ #A $. #B $})
do: [ :each | s print: each ]
separatedBy: [ s space ]].
'''self'' ''classVariables:'' ${ #A $. #B $}’
S.
> On 20 Jan 2020, at 10:45, Sven Van Caekenberghe <[email protected]> wrote:
>
> #foo printString.
> '#foo'
>
> String streamContents: [ :out | out print: #foo ].
> '#foo'
>
> String streamContents: [ :out | out << #foo ].
> 'foo'
>
> I would not use #storeOn: directly, I would consider the fact that
> String>>#printOn: uses it an implementation detail, and a confusing one at
> that.
>
>> On 20 Jan 2020, at 03:54, Eliot Miranda <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>>
>>
>>> On Jan 19, 2020, at 1:50 PM, Stéphane Ducasse <[email protected]>
>>> wrote:
>>>
>>>
>>> The idea that is that I would like to be able to
>>>
>>> text -> tokens -> text
>>>
>>> For text -> tokens
>>>
>>> (RBScanner on: 'self classVariables: { #A . #B }' readStream)
>>> contents collect: #value
>>>
>>>
>>> I wrote a little method that takes the result of the RBScanner and recreate
>>> the text
>>> But I cannot get this method to work.
>>> I’m puzzled because the symbols are eaten.
>>>
>>>
>>> expressionStringFrom: aLine
>>>
>>> "self new
>>> expressionStringFrom: #('self' 'classVariables:' ${ #A $. #B
>>> $})
>>> >>>
>>> 'self classVariables: { A . B }'
>>> "
>>> ^ String streamContents: [ :s |
>>> aLine
>>> do: [ :each | s << each ]
>>> separatedBy: [ s space ]]
>>>
>>> I tried with print:, printOn:, but I failed.
>>>
>>> Any idea?
>>
>> With Symbols one needs to use storeOn:
>>
>>>
>>> S.
>>>
>>>
>>>
>>>
>>> --------------------------------------------
>>> Stéphane Ducasse
>>> http://stephane.ducasse.free.fr <http://stephane.ducasse.free.fr/> /
>>> http://www.pharo.org <http://www.pharo.org/>
>>> 03 59 35 87 52
>>> Assistant: Julie Jonas
>>> FAX 03 59 57 78 50
>>> TEL 03 59 35 86 16
>>> S. Ducasse - Inria
>>> 40, avenue Halley,
>>> Parc Scientifique de la Haute Borne, Bât.A, Park Plaza
>>> Villeneuve d'Ascq 59650
>>> France