düşünün:Sorun :: NonMoose sınıf
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;
...
bu edilmektedir derler çıkışı:
begin isa = $VAR1 = [
'Moose::Object'
];
runtime isa = $VAR1 = [
'CGI::Application',
'Moose::Object'
];
neden ilgileniyorsun? Çünkü bir CGI :: Application :: Plugin :: * sınıfına use
'u denediğimde, zaten derleme zamanında CGI::Application
'dan miras almam bekleniyor. Eklenti sınıfı, sınıfımda bir sınıf yöntemi olarak add_callback
'u çağırmaya çalışır, ancak yapamaz, çünkü benim @ISA
henüz kurulmadı.
Bunu çözmenin en iyi yolu nedir? BEGIN
elkitabında @ISA
kodunu elle düzeltmek MooseX::NonMoose
ile çakışıyor mu? Bu olup olmadığını bilmek Moose donanımları hakkında
package MyApp::CGI;
use Moose;
use MooseX::NonMoose;
use base 'CGI::Application';
extends 'CGI::Application';
Yeterince bilmiyorum (ya da bir şey gerçekten):
aşağıdaki Düzenleme çalışması için görünür, ama saldırgan buluyorum iyi bir fikir.
{... uzanır} BEGIN. – jrockway
(BEGIN için eşanlamlı olarak "use" kelimesinin ortak bir antipattern olduğuna dikkat edin. Ayrıca bkz .: "OK kullan ...") – jrockway
jrockway: Bu bir cevap olmalı, bir yorum olmamalıdır – ysth