Я хочу, чтобы атрибут объявлялся в роли, и его значение должно делиться между всеми экземплярами классов, которые используют роль.Moose: Share атрибут в роли
Я написал это, но я не думаю, что это лучший способ сделать это:
package RealRessource;
use Moose;
use MooseX::ClassAttribute;
class_has '_real_ressource' => (is => 'ro', isa => 'Int', lazy => 1,
builder => '_build_real_ressource');
sub _build_real_ressource {
print "_build_real_ressource\n";
return int(rand(100));
}
__PACKAGE__->meta->make_immutable;
package ShareRessource;
use Moose::Role;
has 'ressource' => (is => 'ro', isa => 'Int', lazy => 1,
builder => '_build_ressource');
sub _build_ressource {
print "Build New Ressource\n";
my $real_ressource = new RealRessource();
return $real_ressource->_real_ressource;
}
package A;
use Moose;
with 'ShareRessource';
__PACKAGE__->meta->make_immutable;
package B;
use Moose;
with 'ShareRessource';
__PACKAGE__->meta->make_immutable;
package main;
use A;
use B;
my $a = new A();
my $b = new B();
print $a->ressource,$/;
print $b->ressource,$/;
Результат:
Build New Ressource
_build_real_ressource
28
Build New Ressource
28