Si consideri il seguente:problema con mixins in un MooseX :: classe 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;
...
L'uscita quando questo viene compila:
begin isa = $VAR1 = [
'Moose::Object'
];
runtime isa = $VAR1 = [
'CGI::Application',
'Moose::Object'
];
Perché mi interessa? Perché quando provo a use
una classe CGI :: Application :: Plugin :: *, mi aspetto che erediti da CGI::Application
già in fase di compilazione. La classe plugin tenta di chiamare add_callback
come metodo di classe sulla mia classe, ma non può, perché il mio @ISA
non è ancora impostato.
Qual è il modo migliore per risolvere questo problema? Ottimizzare manualmente @ISA
in un blocco BEGIN
interferisce con MooseX::NonMoose
?
Modifica
Il seguente sembra funzionare, ma trovo offensivo:
package MyApp::CGI;
use Moose;
use MooseX::NonMoose;
use base 'CGI::Application';
extends 'CGI::Application';
io non ne so abbastanza (o qualsiasi cosa, in realtà) su interni Moose sapere se questo è una buona idea.
BEGIN {extends ...}. – jrockway
(Vale la pena notare che "utilizzare" come sinonimo di BEGIN è un antipattern comune.Vedi anche: "usa ok ...") – jrockway
jrockway: che dovrebbe essere una risposta, non un commento – ysth