J'ai un rôle et plusieurs classes qui mélangent le rôle. La classe Rôle charge toutes les classes d'implémentation afin que tout ce qui importe Blah puisse les utiliser sans avoir à saisir beaucoup de lignes 'use'.Pourquoi l'application de rôle Moose avec les modificateurs de méthode ne fonctionne-t-elle pas dans mon code?
package Blah;
use Moose::Role;
use Blah::A;
use Blah::B;
(etc...)
requires '...';
requires 'foo';
around 'foo' => sub { ... }
Une sous-classe Blah typique:
package Blah::A;
use Moose;
with 'Blah';
sub foo { ... }
__PACKAGE__->meta->make_immutable;
Étant donné que chaque méthode sous-classe de foo 'commence par les mêmes bits de code, le rôle met en œuvre également par l'intermédiaire d'un modificateur de la méthode.
Problème: Moose n'applique le modificateur de méthode à aucune des classes Blah :: *. Cela se produit même si je supprime l'appel make_immutable pour les classes. Je pensais que l'application de rôle était entièrement réalisée au moment de l'exécution, et donc même si les classes Blah :: * sont chargées avant Blah, le modificateur devrait toujours être appliqué? Je cherche une solution, ou une autre façon de faire les choses. À l'heure actuelle, Blah est essentiellement une classe de base abstraite à l'exception du modificateur de méthode, c'est pourquoi j'ai utilisé des rôles pour commencer - mais peut-être qu'une hiérarchie de classes serait meilleure? Merci d'avance.
Accepté, merci.Les lignes d'utilisation sont ennuyantes, mais je suppose que je vais écrire un module d'usine pour elles au lieu de surcharger le module de rôle :) – rjh
@rjh: oui, vous chargez juste ces modules cible trop tôt, avant que le rôle ait eu une chance finir de se construire et de s'y appliquer. – Ether