Hi all,
This might be a rather stupid idea. Plus, it's something I could see people
preferring in a MooseX package instead.
When creating a role, we often provide a list of requirements:
package Does::Serialization::YAML;
use Moose::Role;
requires 'as_xml';
The problem here is that requires() acts on the class level, but sometimes we
need it to act on the instance level and I might not have an as_xml() method
until I have an instance which which knows which 'as_xml()l method to supply
(i.e., we might have different request-dependent xml formats). Thus, we could
potentially have this:
package My::Customer;
use Moose;
with 'Does::Serialization::YAML';
promises qw(as_xml);
promises() would only be useful (that I can think of) in the context of
satisfying role requirements. I'm unsure of exactly how this would work with
method modifiers such as 'before', 'around', etc., but I imagine one could do
something like this:
my $coderef = $class->promises('as_xml');
And when the coderef is invoked (lazily) at runtime, it invokes the actual
as_xml() code or throws an exception if it's not been installed.
Cheers,
Ovid
--
Buy the book - http://www.oreilly.com/catalog/perlhks/
Tech blog - http://use.perl.org/~Ovid/journal/
Twitter - http://twitter.com/OvidPerl
Official Perl 6 Wiki - http://www.perlfoundation.org/perl6