Actually, it's not too hard to create a ReadOnlyString and ReadOnlyArray
which have several methods overridden to produce errors. Overriding at:
and basicAt: goes an awefully long way. Then, the Parser needs to be
updated. I did this once, but it was in an image too divergent from the
main Squeak image that it could really be useful. :|
(I at least *tried* to make Float's and Characters read-only, too, though
I don't remember how far I got!)
-Lex
Hans-Martin Mosner <hm.mosner(a)cityweb.de> wrote:
> Avi Schwartz wrote:
>
> > Hi,
> >
> > I am new to Smalltalk and Squeak, so please bear with me...
>
> Welcome to The Club :-)
>
> > I am trying to figure out why the result of
> >
> > 'abcdef' at: 1 put: $x
> >
> > is $x and not 'xbcdef'.
>
> That has been the Smalltalk behavior since the dark ages... I presume
> the intention is to make it semantically similar to assignment
> expressions, whose value is equal to the assigned value. To achieve your
> intention, you should evalutae
> 'abcdef'
> at: 1 put: $x;
> yourself
> which returns the receiver of the first message expression.
>
> > Now, to complicate matters even worse for me, according to the book
> > 'Smalltalk, Objects, and Design' by Chamond Liu, the result I should
> > expect is an exception since a string literal is immutable.
>
> Squeak does not currently have really immutable objects (with the
> exception of SmallIntegers). This is also true for a number of other
> Smalltalks. To make your code portable to Smalltalks with immutable
> literals, you should write
> 'abcdef' copy
> at: 1 put: $x;
> yourself
> It would certainly be a great service to the Squeak community to
> implement immutable objects, but I think that this requires quite some
> in-depth knowledge of the VM and/or image to do, so this is certainly
> not a beginner's project.
>
> Cheers and happy holidays,
> Hans-Martin