From: Dave Rolsky Date: Thu, 12 Feb 2009 16:57:55 +0000 (+0000) Subject: Revised extending recipe 3 X-Git-Tag: 0.69~11 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=9ac00c2b3a0a546b96c5b88f582e199b2f772d3e;p=gitmo%2FMoose.git Revised extending recipe 3 --- diff --git a/lib/Moose/Cookbook/Extending/Recipe3.pod b/lib/Moose/Cookbook/Extending/Recipe3.pod index 412b452..39dc0a8 100644 --- a/lib/Moose/Cookbook/Extending/Recipe3.pod +++ b/lib/Moose/Cookbook/Extending/Recipe3.pod @@ -29,29 +29,28 @@ Moose::Cookbook::Extending::Recipe3 - Providing an alternate base object class =head1 DESCRIPTION -Often you find that you want to share some behavior between all your -classes. One way to do that is to make a base class and simply add -C> to every class in your -application. However, that can get tedious. Instead, you can simply -create your Moose-alike module that sets the base object class to -C for you. +A common extension is to provide an alternate base class. One way to +do that is to make a C and add C> to every class in your application. That's pretty +tedious. Instead, you can create a Moose-alike module that sets the +base object class to C for you. Then, instead of writing C> you can write C>. In this particular example, our base class issues some debugging -output every time a new object is created, but you can surely think of -some more interesting things to do with your own base class. +output every time a new object is created, but you can think of some +more interesting things to do with your own base class. -This all works because of the magic of L. When we -call C<< Moose::Exporter->setup_import_methods( also => 'Moose' ) >> -it builds an C and C method for you. The C<< also => -'Moose' >> bit says that we want to export everything that Moose does. +This uses the magic of L. When we call Ssetup_import_methods( also => 'Moose' ) >>> it builds +C and C methods for you. The S 'Moose' +>>> bit says that we want to export everything that Moose does. The C method that gets created will call our C -method, passing it C<< for_caller => $caller >> as its arguments. The -C<$caller> is set to the class that actually imported us in the first -place. +method, passing it S $caller >>> as its +arguments. The C<$caller> is set to the class that actually imported +us in the first place. See the L docs for more details on its API. @@ -69,6 +68,12 @@ class. no MyApp::UseMyBase; +=head1 CONCLUSION + +This is an awful lot of magic for a simple base class. You will often +want to combine a metaclass trait with a base class extension, and +that's when this technique is useful. + =head1 AUTHOR Dave Rolsky Eautarch@urth.orgE