considerar lo siguiente:Problema con mixins en una clase MooseX :: NonMoose
package MyApp::CGI;
use Moose;
use MooseX::NonMoose;
use Data::Dumper;
extends 'CGI::Application';
BEGIN {
print "begin isa = " . Dumper \@MyApp::CGI::ISA;
};
print "runtime isa = " . Dumper \@MyApp::CGI::ISA;
...
La salida cuando este se compila:
begin isa = $VAR1 = [
'Moose::Object'
];
runtime isa = $VAR1 = [
'CGI::Application',
'Moose::Object'
];
por qué me importa? Porque cuando intento use
una clase CGI :: Application :: Plugin :: *, espera que herede de CGI::Application
en tiempo de compilación. La clase de complemento intenta llamar al add_callback
como un método de clase en mi clase, pero no puede, porque mi @ISA
aún no está configurado.
¿Cuál es la mejor manera de resolver esto? ¿Ajustar manualmente @ISA
en un bloque BEGIN
interferir con MooseX::NonMoose
?
Editar
El siguiente parece funcionar, pero me resulta ofensiva:
package MyApp::CGI;
use Moose;
use MooseX::NonMoose;
use base 'CGI::Application';
extends 'CGI::Application';
No sé lo suficiente (o nada, en realidad) sobre el funcionamiento interno de los alces saber si esto es una buena idea.
BEGIN {extends ...}. – jrockway
(Vale la pena señalar que "usar" como sinónimo de BEGIN es un antipatín común. Ver también: "usar bien ...") – jrockway
jrockway: debería ser una respuesta, no un comentario – ysth