Skip to content

Instantly share code, notes, and snippets.

@rsimoes
Created January 2, 2012 12:05
Show Gist options
  • Save rsimoes/1550442 to your computer and use it in GitHub Desktop.
Save rsimoes/1550442 to your computer and use it in GitHub Desktop.
Moose defaults vs builders

Defaults allow subclassing

If we subclass our Person class, we can override the size attribute's default:

package Lilliputian;
 
use Moose;
extends 'Person';
 
has +size => ( default => "small" );
 

Defaults work well with roles

For example, a role could provide an attribute but require that the consuming class provide the default:

package HasSize;
use Moose::Role;
 
requires '_default_size';
 
has 'size' => (
    is      => 'ro',
    lazy    => 1,
    default => sub { $self->_default_size }
);

package Lilliputian;
use Moose;
 
with 'HasSize';
 
sub _default_size { return "small" }
@rsimoes
Copy link
Author

rsimoes commented Jan 2, 2012

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment