X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FManual%2FConstruction.pod;h=9f35a9df03df6b5b8ab0ed39ef4ef89c7d589152;hb=aa8d5e2de08b41212f4a982585da4a39a4a794c4;hp=36416f7ba0d04658e628c96c0c56c2911ffe9d9b;hpb=5384dda8d35229c2b3bd86e1ee4e368ef8a1c18a;p=gitmo%2FMoose.git diff --git a/lib/Moose/Manual/Construction.pod b/lib/Moose/Manual/Construction.pod index 36416f7..9f35a9d 100644 --- a/lib/Moose/Manual/Construction.pod +++ b/lib/Moose/Manual/Construction.pod @@ -2,17 +2,19 @@ =head1 NAME -Moose::Manual::Classes - Object construction (and destruction) with Moose +Moose::Manual::Construction - Object construction (and destruction) with Moose =head1 WHERE'S THE CONSTRUCTOR? B method for your classes!> When you C in your class, you will become a subclass of -C, which provides a C method for you. And if you -follow L and make +L, which provides a C method for you. If you +follow our recommendations in L and make your class immutable, then you actually get a class-specific C -method genreated in your class. +method "inlined" in your class. + +=head1 OBJECT CONSTRUCTION AND ATTRIBUTES The Moose-provided constructor accepts a hash or hash reference of named parameters matching your attributes (actually, matching their @@ -22,31 +24,31 @@ you're ready to start creating objects! =head1 OBJECT CONSTRUCTION HOOKS -Sometimes you need to hook into object construction. Some common needs -are validating an object's state, logging, and allowing non-hash(ref) -constructor arguments. Moose provides hooks for these needs with the -C and C methods. +Moose lets you hook into object construction. You can validate an +object's state, do logging, or maybe allow non-hash(ref) constructor +arguments. You can do this by creating C and/or C +methods. -If these are defined in your class, then Moose will arrange for them -to be called as part of the object construction process. +If these methods exist in your class, Moose will arrange for them to +be called as part of the object construction process. =head2 BUILDARGS -The C method is called I an object is created, and -is therefore called as a class method. It will receive all of the -arguments that were passed to C I. Your C -method must then return a hash reference. This hash reference will be -used to construct the object, so it should contain keys matching your -attributes' names (well, Cs). +The C method is called as a class method I an +object is created. It will receive all of the arguments that were +passed to C I, and is expected to return a hash +reference. This hash reference will be used to construct the object, +so it should contain keys matching your attributes' names (well, +Cs). -One common use for C is to accomodate a non-hash(ref) +One common use for C is to accommodate a non-hash(ref) calling style. For example, we might want to allow our Person class to be called with a single argument of a social security number, C<< Person->new($ssn) >>. Without a C method, Moose will complain, because it expects a hash or hash reference. We can use the C method to -accomodate this calling style: +accommodate this calling style: sub BUILDARGS { my $class = shift; @@ -60,16 +62,16 @@ accomodate this calling style: } Note the call to C. This will call the default -C in C. This method handles distinguishing -between a hash reference and a plain hash, so you don't have to. +C in L. This method handles distinguishing +between a hash reference and a plain hash for you. =head2 BUILD The C method is called I an object is created. There are -many potential uses for a C method. One of the most common is -to check that the object state makes sense. While we can validate -individual attributes through the use of types, we can't validate the -state of a whole object that way. +ways to use a C method. One of the most common is to check that +the object state is valid. While we can validate individual attributes +through the use of types, we can't validate the state of a whole +object that way. sub BUILD { my $self = shift; @@ -89,7 +91,7 @@ object creation. debug( 'Made a new person - SSN = ', $self->ssn, ); } -=head3 BUILD and Parent Classes +=head3 BUILD and parent classes The interaction between multiple C methods in an inheritance hierarchy is different from normal Perl methods. B methods in your hierarchy to be called, from most to least specific. In most cases, Perl's built-in garbage collection is sufficient, and -you won't need ot provide a C method. +you won't need to provide a C method. =head1 AUTHOR @@ -121,7 +123,7 @@ Dave Rolsky Eautarch@urth.orgE =head1 COPYRIGHT AND LICENSE -Copyright 2008 by Infinity Interactive, Inc. +Copyright 2009 by Infinity Interactive, Inc. L