On Friday 02 March 2007 00:53, demerphq wrote:
*snip good discussion*
> Now if there was an ->implements() utility function as well as the
> ->isa() funcation, then I think IO::Handle would contrive to ensure
> that IO::String->new(\$string)->implements('IO::Handle') would return
> true even though IO::String->new(\$string)->isa('IO::Handle') would
> not. (Im not sure if this is the same as chromatics proposed 'does'
> function).
Yes, that's one of the main motivations for roles. It's in 5.9.4 as
UNIVERSAL::DOES().
For the curious who want to do further research, C++ supports structural
typing, while Perl's type system is, at least for objects, mostly nominal.
The logical approach to a nominal type system appears to lead to allomorphism.
For more detail, see:
http://www.oreillynet.com/onlamp/blog/2006/08/roles_composable_units_of_obje.html
-- c