X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP%2FAttribute.pm;h=305d70e020e8444463a1c7652519a344ce42691d;hb=bd4e03f969edf4e9f30835d591baf521605a684b;hp=748bafa28974d3014b5b91a2564b4ff7216dcef1;hpb=4d154c08ac55b0f2daa5c6371f6542214e53a51b;p=gitmo%2FClass-MOP.git diff --git a/lib/Class/MOP/Attribute.pm b/lib/Class/MOP/Attribute.pm index 748bafa..305d70e 100644 --- a/lib/Class/MOP/Attribute.pm +++ b/lib/Class/MOP/Attribute.pm @@ -7,7 +7,7 @@ use warnings; use Carp 'confess'; use Scalar::Util 'blessed', 'reftype', 'weaken'; -our $VERSION = '0.05'; +our $VERSION = '0.06'; sub meta { require Class::MOP::Class; @@ -60,6 +60,20 @@ sub clone { return bless { %{$self}, %options } => blessed($self); } +sub initialize_instance_slot { + my ($self, $instance, $params) = @_; + my $init_arg = $self->init_arg(); + # try to fetch the init arg from the %params ... + my $val; + $val = $params->{$init_arg} if exists $params->{$init_arg}; + # if nothing was in the %params, we can use the + # attribute's default value (if it has one) + if (!defined $val && $self->has_default) { + $val = $self->default($instance); + } + $instance->{$self->name} = $val; +} + # NOTE: # the next bunch of methods will get bootstrapped # away in the Class::MOP bootstrapping section @@ -263,8 +277,6 @@ An attribute must (at the very least), have a C<$name>. All other C<%options> are contained added as key-value pairs. Acceptable keys are as follows: -=item B - =over 4 =item I @@ -375,6 +387,10 @@ defined, and false (C<0>) otherwise. =back +=item B + +=item B + =back =head2 Informational