Voici quelque chose d'étrange que je ne peux pas comprendre. J'ai une classe Moose que je veux aussi exporter certaines constantes, en utilisant l'ancien module Exporter standard. Cependant, dès que j'ajoute extends Exporter
à ma classe, pour une raison quelconque, la valeur par défaut constructeur Moose ne reçoit plus hérité et je reçois l'erreur fatale:Moose: l'exportateur extensible provoque la disparition du constructeur?
Can't locate object method "new" via package "MyApp::Dispatch"
Voici un test simple qui illustre le problème.
package Foo;
use Moose;
use constant NARF => 'poit';
extends 'Exporter';
1;
$ perl -I./lib -MFoo -e '$f=Foo->new'
Can't locate object method "new" via package "Foo" at -e line 1.
Retrait de la ligne extends
fait le problème disparaît.
Ceci utilise Moose 0.93.
Eh bien, cela aurait dû être évident, n'est-ce pas? Je me sens bête ce soir. :) J'ai déjà utilisé MooseX :: NonMoose auparavant, donc j'aurais dû y penser, mais je ne l'ai pas fait. Quoi qu'il en soit, importer 'import' plutôt qu'hériter fonctionne bien. – friedo
Le paramètre 'extends' de Moose est équivalent à' @ISA = @ list'. Si cette liste est vide au moment de la compilation Moose met automatiquement 'Moose :: Object' dans @ISA pour vous. – perigrin
@perigrin: c'était essentiellement ce que j'ai dit. – ysth