[Traits] analogue for #canUnderstand: ?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

[Traits] analogue for #canUnderstand: ?

Klaus D. Witzel
I have to reflect on "classic" Behavior and also on traits. For Behavior I  
can use

        aTraitOrBehavior canUnderstand: aSelector

and be assured that at another point in time, in the same image instances  
of aTraitOrBehavior will respond to aSelector.

What query must be used for Trait and TraitComposition, in the same sense,  
i.e. users of this traits / composition will definitely respond to  
aSelector.

And what query must be used in analogue to #isBehavior when  
aTraitOrBehavior is Trait or a TraitComposition. I have to avoid DNU in  
images without traits.

I can find out many details by myself but would like to check against an  
expert opinion. Thank you in advance.

/Klaus


Reply | Threaded
Open this post in threaded view
|

Re: [Traits] analogue for #canUnderstand: ?

Adrian Lienhard

On Jul 12, 2006, at 11:20 , Klaus D. Witzel wrote:

> I have to reflect on "classic" Behavior and also on traits. For  
> Behavior I can use
>
> aTraitOrBehavior canUnderstand: aSelector
>
> and be assured that at another point in time, in the same image  
> instances of aTraitOrBehavior will respond to aSelector.
>
> What query must be used for Trait and TraitComposition, in the same  
> sense, i.e. users of this traits / composition will definitely  
> respond to aSelector.

just like classes, a traits also understand #canUnderstand:

"TPureBehavior canUnderstand: #canUnderstand:" --> true

because "TPureBehavior selectors includes: #canUnderstand:" --> true
and the trait TPureBehavior is used both by the classes Behavior and  
TraitBehavior.


for trait compositions, there is #includesMethod:
e.g., "(TPureBehavior @ {#foo: -> #compile:}) asTraitComposition  
includesMethod: #foo:" --> true

> And what query must be used in analogue to #isBehavior when  
> aTraitOrBehavior is Trait or a TraitComposition. I have to avoid  
> DNU in images without traits.

whether an object is a trait: #isTrait
there's no such test for trait compositions because I never needed  
one -- you would have to add one yourself. Also, of course, #isTrait  
will not work in older images unless you add this method as an  
extension to Object.

HTH,
Adrian

>
> I can find out many details by myself but would like to check  
> against an expert opinion. Thank you in advance.
>
> /Klaus
>
>


Reply | Threaded
Open this post in threaded view
|

Re: [Traits] analogue for #canUnderstand: ?

Klaus D. Witzel
Hi Adrian,

on Wed, 12 Jul 2006 20:53:43 +0200, you wrote:

> On Jul 12, 2006, at 11:20 , Klaus D. Witzel wrote:
>
>> I have to reflect on "classic" Behavior and also on traits. For  
>> Behavior I can use
>>
>> aTraitOrBehavior canUnderstand: aSelector
>>
>> and be assured that at another point in time, in the same image  
>> instances of aTraitOrBehavior will respond to aSelector.
>>
>> What query must be used for Trait and TraitComposition, in the same  
>> sense, i.e. users of this traits / composition will definitely respond  
>> to aSelector.
>
> just like classes, a traits also understand #canUnderstand:
>
> "TPureBehavior canUnderstand: #canUnderstand:" --> true
>
> because "TPureBehavior selectors includes: #canUnderstand:" --> true
> and the trait TPureBehavior is used both by the classes Behavior and  
> TraitBehavior.

Yes, I've seen that but wasn't sure this coveres all cases.

> for trait compositions, there is #includesMethod:
> e.g., "(TPureBehavior @ {#foo: -> #compile:}) asTraitComposition  
> includesMethod: #foo:" --> true

Then, together with the above, the following must hold for each and every  
nut and bolt:

  ((something respondsTo: #canUnderstand:) and: [something canUnderstand:  
aSelector])
or:
  ((something respondsTo: #includesMethod:) and: [something includesMethod:  
aSelector])


>> And what query must be used in analogue to #isBehavior when  
>> aTraitOrBehavior is Trait or a TraitComposition. I have to avoid DNU in  
>> images without traits.
>
> whether an object is a trait: #isTrait
> there's no such test for trait compositions because I never needed one

... a situation which I often value as good design :)

> -- you would have to add one yourself. Also, of course, #isTrait will  
> not work in older images unless you add this method as an extension to  
> Object.

Right. For the moment I'll let #respondsTo: do the work, until performance  
demands something else.

> HTH,

Yes. I got one bit more than I hoped for, a simple expression governed by  
a single quantifier.

Thank you Adrian.

/Klaus

> Adrian
>
>>
>> I can find out many details by myself but would like to check against  
>> an expert opinion. Thank you in advance.
>>
>> /Klaus
>>
>>
>
>
>