I think currently DOES support is located in Moose::Object, seems like a good idea to add support for it in the Meta Role too.

Patches welcome, would likely be a pretty simple one.

- Stevan

On Jan 6, 2011, at 1:20 AM, Ovid wrote:

My apologies if this has already been addressed, but should roles respond to
"DOES"?

   {
       package Some::Role;
       use Moose::Role;
   }
   {
       package Some::Other::Role;
       use Moose::Role;
       with 'Some::Role';
   }
   {
       package Some::Class;
       use Moose;
       with 'Some::Other::Role';
   }
   print Some::Class->DOES('Some::Role'); # good
   print Some::Other::Role->DOES('Some::Role'); # bad
   print Some::Role->DOES('Some::Role'); # bad
That prints out:

Can't locate object method "DOES" via package "Some::Other::Role" at role.pl
line 18.
   1
   shell returned 255

The use case here is that when roles are composed from other roles, I might want to query a role directly as to whether or not it does a given role. Further, I was thinking that all roles should response true for $role- >DOES($role).

I know I can write those as this:

   print Some::Class->meta->does_role('Some::Role');
   print Some::Other::Role->meta->does_role('Some::Role');
   print Some::Role->meta->does_role('Some::Role');

But the inconsistency in ->DOES seems odd and I was wondering if this is desired
behavior.

This is Moose 1.21.

Cheers,
Ovid--
Live and work overseas - http://overseas-exile.blogspot.com/
Buy the book           - http://www.oreilly.com/catalog/perlhks/
Tech blog              - http://blogs.perl.org/users/ovid/
Twitter                - http://twitter.com/OvidPerl/


Reply via email to