Rechercher une page de manuel
MooseX::Role::Parameterized.3pm
Langue: en
Version: 2009-01-30 (fedora - 05/07/09)
Section: 3 (Bibliothèques de fonctions)
NAME
MooseX::Role::Parameterized - parameterized rolesVERSION
version 0.04SYNOPSIS
package MyRole::Counter; use MooseX::Role::Parameterized; parameter name => ( isa => 'Str', required => 1, ); role { my $p = shift; my $name = $p->name; has $name => ( is => 'rw', isa => 'Int', default => 0, ); method "increment_$name" => sub { my $self = shift; $self->$name($self->$name + 1); }; method "decrement_$name" => sub { my $self = shift; $self->$name($self->$name - 1); }; }; package MyGame::Tile; use Moose; with 'MyRole::Counter' => { name => 'stepped_on' };
MooseX::Role::Parameterized::Tutorial
Stop! If you're new here, please read MooseX::Role::Parameterized::Tutorial.DESCRIPTION
Your parameterized role consists of two things: parameter declarations and a "role" block.Parameters are declared using the ``parameter'' keyword which very much resembles ``has'' in Moose. You can use any option that ``has'' in Moose accepts. The default value for the ``is'' option is ``ro'' as that's a very common case. These parameters will get their values when the consuming class (or role) uses ``with'' in Moose. A parameter object will be constructed with these values, and passed to the "role" block.
The "role" block then uses the usual Moose::Role keywords to build up a role. You can shift off the parameter object to inspect what the consuming class provided as parameters. You can use the parameters to make your role customizable!
There are many paths to parameterized roles (hopefully with a consistent enough API); I believe this to be the easiest and most flexible implementation. Coincidentally, Pugs has a very similar design (I'm not yet convinced that that is a good thing).
CAVEATS
You must use this syntax to declare methods in the role block: "method NAME => sub { ... };". This is due to a limitation in Perl. In return though you can use parameters in your methods!``alias'' in Moose::Role and ``excludes'' in Moose::Role are not yet supported. I'm completely unsure of whether they should be handled by this module. Until we figure out a plan, both declaring and providing a parameter named "alias" or "excludes" is an error.
AUTHOR
Shawn M Moore, "<sartak@bestpractical.com>"SEE ALSO
MooseX::Role::MatcherContenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre