2009/6/30 Cameron Sanders csanders.personal@functional-analyst.com:
What you write (down below) is close to what I was thinking when I said have all #isXXX return false by default; although I would test that the first two characters match 'i' and 's' and that more characters exist, if so, return false, otherwise, normal #doesNotUnderstand: behavior.
I would treat #is by itself differently... it is ... or it couldn't be tested! So I would do nothing for simple #is. and I don't like #is: because it looks like a class type test... but that is part of the point, eh?
I wouldn't say that. It is more trait-based approach than class-based.
The concept of #is: are: When object foo having some trait, it should answer true on 'foo is: sometrait ', otherwise false. Obviously since most subclasses inherit the behavior & traits of base class, you should honor this rule in overrides of #is: method i.e.:
Someclass>>is: object ^ (your tests here) or: [ super is: object ]
otherwise, if you omit the super send, some of the traits will become unavailable. But of course, except when you doing this intentionally.
I'll have to go back to the original example (by siguctua@gmail.com, and read more about lambdas) but I thought that CVLambda would implement #isCVLambda to return true when it can be verified to be one. The example did not illustrate #doesNotUnderstand:.
Back to the question of adding behavior to classes that you don't own. VisualWorks has a means to extend a class in a different package ... as I recall. As I recall, squeak has no such capability, right?
MC having this capability for a years.
Thanks. You have given me food for thought...
Ciao, Cam
On Jun 29, 2009, at 3:43 PM, David Goehrig wrote:
What I typically what I've been doing to eliminate all of these methods with a single simple change:
Object doesNoUnderstand: aMessage ^ false