Variables removed from class definition,
but still referenced by code
Josh Gargus
schwa at fastmail.us
Wed Feb 1 19:12:41 UTC 2006
OK that makes sense. Definitely something to avoid doing.
Josh
On Feb 1, 2006, at 12:08 PM, Andreas Raab wrote:
> When removing the variable from the superclass, "collection" got
> transferred as a binding to Undeclared which makes it behave like a
> class variable. Therefore, superclass and subclass have different
> "meanings" when you refer to the name collection (superclass thinks
> it's a "class var", subclass thinks it's an iVar).
>
> Cheers,
> - Andreas
>
> Josh Gargus wrote:
>> I have created a changeset in which a class is created with an
>> iVar, methods added that reference that iVar, and finally the
>> class definition is changed to remove the iVar. Newly created
>> instances of the class behave as though the iVar is still present.
>> Furthermore, when I add a new subclass that has an iVar of the
>> same name, the class compiles OK (if the superclass had
>> explicitly defined the iVar, I would not have been able to define
>> it in the subclass). However, different slots are being accessed
>> by superclass methods and subclass methods. In the following
>> code (file in the attached changeset first):
>> inst := ClassThatUsedToHaveAVariable new.
>> inst add: 'string'.
>> inst contents.
>> subInst := ClassThatUsedToHaveAVariableSubclass new.
>> subInst add: 'string2'.
>> subInst subAdd: 'string3'.
>> subInst contents.
>> subInst subContents.
>> 'subInst contents' and 'subInst subContents' do not give the same
>> result. However, if the 'collection' variable is deleted from
>> the subclass definition, they do answer the same result.
>> What exactly are the semantics here? It seems like this could
>> possibly cause some problems.
>> Thanks,
>> Josh
>>
>> ---------------------------------------------------------------------
>> ---
>
>
More information about the Squeak-dev
mailing list
|