Name
Mo::default - Adds the default feature to Mo's has
Synopsis
has
job
=> (
default
=>
'Killer'
);
has
name
=> (
default
=>
sub
{
'Joe'
} );
has
age
=> 42;
has
colors
=> [
'green'
,
'blue'
];
Description
Adds the default parameter to has, which expects a value. If the value is a code ref, it is called to produce the default. If the value is a hash or array ref, then a shallow copy is made for the default. If there is an odd number of arguments after the attribute name, then the first value is the default.
These 3 lines are the same:
has
things
=>
default
=>
sub
{+{}};
has
things
=>
default
=> {};
has
things
=> {};
Laziness
Default attribute values in Mo are lazy by default. This can be changed by explicitly setting the lazy
argument to false, in order to cause it to be initialized during instantiation.
has
status
=>
'active'
;
# lazy
has
location
=>
sub
{ ... },
lazy
=> 1;
# lazy
has
target
=>
sub
{ ... },
lazy
=> 0;
# eager
To change the default behavior and make attributes to be initialized eagerly by default, import nonlazy
.
has
status
=>
'active'
;
# eager
has
location
=>
sub
{ ... },
lazy
=> 1;
# lazy
has
target
=>
sub
{ ... },
lazy
=> 0;
# eager