Hi. A basic question I hope someone can answer. This works: â cut here --- | stream aInt | stream := (String new:20) writeStream. aInt := 23. (aInt storeOn:stream) = (aInt class readFrom:(stream contents)) â cut here --- This doesnât (generates an error): â cut here --- | stream aTime | stream := (String new:20) writeStream. aTime := Time now. (aTime storeOn:stream) = (aTime class readFrom:(stream contents)) â cut here --- To the question then. Assuming the second case isnât wrong in some fashion I donât understand, is it the case that storeOn:/readFrom: is supposed to be symmetrical for all classes? I ask it that way because there are a couple of Kernel classes where Iâve seen this to not be the case. TIA, âRick
On 23/5/14 19:58, Rick Kitts wrote:
Hi. A basic question I hope someone can answer. This works:
â cut here --- | stream aInt |
stream := (String new:20) writeStream. aInt := 23. (aInt storeOn:stream) = (aInt class readFrom:(stream contents))
â cut here ---
This doesnât (generates an error):
â cut here --- | stream aTime |
stream := (String new:20) writeStream. aTime := Time now. (aTime storeOn:stream) = (aTime class readFrom:(stream contents))
â cut here ---
To the question then. Assuming the second case isnât wrong in some fashion I donât understand, is it the case that storeOn:/readFrom: is supposed to be symmetrical for all classes? I ask it that way because there are a couple of Kernel classes where Iâve seen this to not be the case.
It would be nice that they get symmetric. because the goal of storeOn: is to recreate the same object. So if you have a fix please - sign the license agreement - open a bug entry - publish the fix.
TIA, âRick
I wanted to take a second to close the book on this. It turns out that storeOn:/readFrom: are not supposed to be symmetrical. printOn:/readFrom: are supposed to be symmetrical. storeOn: generates a string that can be fed into the interpreter/compiler such that when it is executed an instance that is equal to the receiver of the storeOn: message is created. Iâm trying to figure out how to do that now so I can convert a bunch of questionable tests of storeOn:. Thanks for taking the time. I probably should have RTFMed this a little better before troubling the list. âRick On May 23, 2014 at 11:15:43 PM, stepharo (stepharo@free.fr) wrote: On 23/5/14 19:58, Rick Kitts wrote: Hi. A basic question I hope someone can answer. This works: â cut here --- | stream aInt | stream := (String new:20) writeStream. aInt := 23. (aInt storeOn:stream) = (aInt class readFrom:(stream contents)) â cut here --- This doesnât (generates an error): â cut here --- | stream aTime | stream := (String new:20) writeStream. aTime := Time now. (aTime storeOn:stream) = (aTime class readFrom:(stream contents)) â cut here --- To the question then. Assuming the second case isnât wrong in some fashion I donât understand, is it the case that storeOn:/readFrom: is supposed to be symmetrical for all classes? I ask it that way because there are a couple of Kernel classes where Iâve seen this to not be the case. It would be nice that they get symmetric. because the goal of storeOn: is to recreate the same object. So if you have a fix please    - sign the license agreement    - open a bug entry    - publish the fix. TIA, âRick
I wouldn't rely on such symmetry. Given the fact #printOn: is the only printing "instrumentation" available to show objects in debuggers, inspectors, etc. Most of the times it just shows a short representation of the object, not very useful to recreate an instance from such short string. Regards, Esteban A. Maringolo 2014-05-26 14:11 GMT-03:00 Rick Kitts <rkitts@loudhouse.org>:
I wanted to take a second to close the book on this. It turns out that storeOn:/readFrom: are not supposed to be symmetrical. printOn:/readFrom: are supposed to be symmetrical.
storeOn: generates a string that can be fed into the interpreter/compiler such that when it is executed an instance that is equal to the receiver of the storeOn: message is created. Iâm trying to figure out how to do that now so I can convert a bunch of questionable tests of storeOn:.
Thanks for taking the time. I probably should have RTFMed this a little better before troubling the list.
âRick
On May 23, 2014 at 11:15:43 PM, stepharo (stepharo@free.fr) wrote:
On 23/5/14 19:58, Rick Kitts wrote:
Hi. A basic question I hope someone can answer. This works:
â cut here --- | stream aInt |
stream := (String new:20) writeStream. aInt := 23. (aInt storeOn:stream) = (aInt class readFrom:(stream contents))
â cut here ---
This doesnât (generates an error):
â cut here --- | stream aTime |
stream := (String new:20) writeStream. aTime := Time now. (aTime storeOn:stream) = (aTime class readFrom:(stream contents))
â cut here ---
To the question then. Assuming the second case isnât wrong in some fashion I donât understand, is it the case that storeOn:/readFrom: is supposed to be symmetrical for all classes? I ask it that way because there are a couple of Kernel classes where Iâve seen this to not be the case.
It would be nice that they get symmetric. because the goal of storeOn: is to recreate the same object. So if you have a fix please - sign the license agreement - open a bug entry - publish the fix.
TIA, âRick
participants (3)
-
Esteban A. Maringolo -
Rick Kitts -
stepharo