Rozważmy następujący:problem z wstawek w MooseX :: NonMoose klasa
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;
...
Wyjście gdy kompiluje się:
begin isa = $VAR1 = [
'Moose::Object'
];
runtime isa = $VAR1 = [
'CGI::Application',
'Moose::Object'
];
dlaczego mnie to obchodzi? Ponieważ, gdy próbuję uzyskać use
klasę CGI :: Application :: Plugin :: *, oczekuje ona, że dziedziczę już od CGI::Application
w czasie kompilacji. Klasa wtyczek próbuje wywołać add_callback
jako metodę klasy na mojej klasie, ale nie może, ponieważ moja @ISA
nie jest jeszcze skonfigurowana.
Jaki jest najlepszy sposób rozwiązania tego problemu? Czy ręczne poprawianie @ISA
w bloku BEGIN
koliduje z MooseX::NonMoose
?
Edit
Poniższy wydaje się działać, ale uważam, że ofensywa:
package MyApp::CGI;
use Moose;
use MooseX::NonMoose;
use base 'CGI::Application';
extends 'CGI::Application';
nie wiem wystarczająco (lub czegokolwiek, naprawdę) o Moose wewnętrznych wiedzieć, czy jest to dobry pomysł.
BEGIN {extends ...}. – jrockway
(Warto zauważyć, że "używanie" jako synonimu dla BEGIN jest powszechnym antypacternem Patrz także: "użyj ok ...") – jrockway
jrockway: to powinna być odpowiedź, a nie komentarz – ysth