Beachten Sie Folgendes:Problem Mixins in einem MooseX :: NonMoose Klasse
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;
...
Der Ausgang, wenn dieser kompiliert wird:
begin isa = $VAR1 = [
'Moose::Object'
];
runtime isa = $VAR1 = [
'CGI::Application',
'Moose::Object'
];
Warum interessieren sich ich? Weil, wenn ich use
eine CGI :: Application :: Plugin :: * Klasse versuche, erwartet es mich von zur Kompilierzeit bereits erben. Die Plugin-Klasse versucht, add_callback
als Klassenmethode für meine Klasse aufzurufen, kann dies aber nicht, da meine @ISA
noch nicht eingerichtet ist.
Was ist der beste Weg, dies zu lösen? Würde @ISA
manuell in einem BEGIN
Block zwicken MooseX::NonMoose
interferieren?
bearbeiten
Die folgende scheint zu funktionieren, aber ich finde es beleidigend:
package MyApp::CGI;
use Moose;
use MooseX::NonMoose;
use base 'CGI::Application';
extends 'CGI::Application';
Ich weiß nicht genug (oder irgendetwas, wirklich) über Moose Interna zu wissen, ob dies ist eine gute Idee.
BEGIN {erweitert ...}. – jrockway
(Beachten Sie, dass "verwenden" als Synonym für BEGIN ist eine gemeinsame Antipattern. Siehe auch: "use ok ...") – jrockway
jrockway: das sollte eine Antwort sein, kein Kommentar – ysth