[squeak-dev] Re: Traits in Trunk - how to remove a trait from
a class?
Levente Uzonyi
leves at elte.hu
Mon Oct 22 14:41:26 UTC 2012
On Mon, 22 Oct 2012, Casimiro de Almeida Barreto wrote:
> On 21-10-2012 22:49, Levente Uzonyi wrote:
>> On Sun, 21 Oct 2012, Casimiro de Almeida Barreto wrote:
>>
>>> It is also interesting that when you modify a Trait message inside a
>>> class (either directly in the browser or else during debbuging),
>>> there'll be a new message, particular to that class that diverges from
>>> the message in Traits, causing a kind of "overload" (two messages of the
>>> same name, one in the Traits definition other in the class definition).
>>> If developer doesn't get it ASAP, it can be source of huge trouble.
>>
>> I guess that's how Traits should work.
> So so...
>
> Because sometimes developer is tempted to correct things from/inside
> debugger. Then he'll have two versions of the method: a corrected
> version for the class in question and a wrong version elsewhere.
Better tools could help avoid these issues, but support for Traits is
still minimal.
Levente
>
> CdAB
>>
>>
>> Levente
>>
>>>
>>> CdAB
>>>
>>> On 21-10-2012 02:47, Chris Cunningham wrote:
>>>> On Fri, Oct 19, 2012 at 1:39 AM, Andreas.Raab <andreas.raab at gmx.de>
>>>> wrote:
>>>>> Chris Cunningham wrote
>>>>>> Is there a way (UI, code) to make a class NOT use any traits after a
>>>>>> class has a Trait assigned to it?
>>>>> Try this:
>>>>>
>>>>> Trait flattenTraitMethodsInClass: MyClass.
>>>> That would probably work well, but I wanted to remove the Trait and
>>>> all of the behavior related to the Trait from the class. I could do
>>>> this and then delete the methods, but that isn't really efficient.
>>>>
>>>> I did find the 'right' way to do this. To add a trait to a class, you
>>>> change the definition of the class in the browser to look like:
>>>>
>>>> Object subclass: #AClass
>>>> uses: ATraitComposition
>>>> instanceVariableNames: ...
>>>>
>>>> To remove that trait (and any others), change the definition to be:
>>>>
>>>> Object subclass: #AClass
>>>> uses: Array new
>>>> instanceVariableNames: ...
>>>>
>>>> This will remove the Trait and the behavior from the class (and, for
>>>> that matter, change the class definition code snippit). Odd, but it
>>>> works.
>>>>
>>>> In my case, the goal was a temporary trait usage while building the
>>>> parser, with the intention of removing the behavior from all of the
>>>> classes later. Or, of course, removing it from other classes that I
>>>> accidentally added the trait to.
>>>>
>>>> -Chris
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>
>
>
More information about the Squeak-dev
mailing list
|