On Thu, 2004-01-08 at 16:24, Jonathan Lang wrote:

> In this example, there's no difference between the Dog and Tree roles;
> however, this would almost certainly not be the case most of the time - at
> the very least, a class with a Dog role would have @.legs, while a class
> with the Tree role would have @.branches.  However, if all that happens
> when you specify a demand for the Dog role in a signature is that the
> object must meet Dog's demands, then both crossPerson and Trog will be
> accepted.  

I would consider that a mistake.

All that doing a role should imply is that somehow, that class
understands the syntax *and* semantics of the methods of that role. 
Introspection can't reliably reveal whether $some_object.bark accesses a
property (noun) or a method (verb).

It's true that looking for @.legs versus @.branches could get you
closer, but I'm not sure that it's been decided whether methods of a
role should blissfully ignore all of the object's state.  Besides, in a
delegation situation, there could easily be some sort of magic that
handles those attributes that the introspection mechanism might miss.

-- c

Reply via email to