From: Matt S Trout Date: Sun, 19 Feb 2012 23:34:28 +0000 (+0000) Subject: improve incompat w/Moose docs X-Git-Tag: v0.009014~12 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMoo.git;a=commitdiff_plain;h=5902c1fcd2ed52f78c6710638be7798fc3c05c8d improve incompat w/Moose docs --- diff --git a/Changes b/Changes index c549736..4847183 100644 --- a/Changes +++ b/Changes @@ -1,3 +1,4 @@ + - Update incompatibilities with Moose documentation - Remove Sub::Quote's outstanding queue since it doesn't actually slow things down to do it this way and makes debugging easier. - Revert 'local $@' around require calls to avoid triggering Unknown Error diff --git a/lib/Moo.pm b/lib/Moo.pm index aea43e1..19f5327 100644 --- a/lib/Moo.pm +++ b/lib/Moo.pm @@ -430,11 +430,28 @@ aware can take advantage of this. =head1 INCOMPATIBILITIES WITH MOOSE You can only compose one role at a time. If your application is large or -complex enough to warrant complex composition, you wanted L. +complex enough to warrant complex composition, you wanted L. Note that +this does not mean you can only compose one role per class - -There is no complex type system. C is verified with a coderef, if you + with 'FirstRole'; + with 'SecondRole'; + +is absolutely fine, there's just currently no equivalent of Moose's + + with 'FirstRole', 'SecondRole'; + +which composes the two roles together, and then applies them. + +There is no built in type system. C is verified with a coderef, if you need complex types, just make a library of coderefs, or better yet, functions -that return quoted subs. +that return quoted subs. L provides a similar API +to L so that you can write + + has days_to_live => (is => 'ro', isa => Int); + +and have it work with both; it is hoped that providing only subrefs as an +API will encourage the use of other type systems as well, since it's +probably the weakest part of Moose design-wise. C is not supported in core since the author considers it to be a bad idea but may be supported by an extension in future. @@ -478,6 +495,23 @@ The nearest L invocation would be: use warnings FATAL => "all"; use MooseX::AttributeShortcuts; +or, if you're inheriting from a non-Moose class, + + package MyClass; + + use Moose; + use MooseX::NonMoose; + use warnings FATAL => "all"; + use MooseX::AttributeShortcuts; + +Finally, Moose requires you to call + + __PACKAGE__->meta->make_immutable; + +at the end of your class to get an inlined (i.e. not horribly slow) +constructor. Moo does it automatically the first time ->new is called +on your class. + =head1 AUTHOR mst - Matt S. Trout (cpan:MSTROUT)