xem xét như sau:Vấn đề với mixins trong một MooseX :: lớp 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;
...
Sản lượng khi điều này biên dịch là:
begin isa = $VAR1 = [
'Moose::Object'
];
runtime isa = $VAR1 = [
'CGI::Application',
'Moose::Object'
];
Tại sao tôi chăm sóc? Bởi vì khi tôi cố gắng để use
một CGI :: Ứng dụng :: Plugin :: * lớp, nó hy vọng tôi được kế thừa từ CGI::Application
tại thời gian biên dịch rồi. Lớp plugin cố gắng gọi add_callback
là một phương thức lớp học trên lớp của tôi, nhưng không thể, bởi vì @ISA
của tôi chưa được thiết lập.
Cách tốt nhất để giải quyết vấn đề này là gì? Việc tinh chỉnh @ISA
theo cách thủ công trong khối BEGIN
có gây trở ngại cho MooseX::NonMoose
không?
Sửa
Sau đây xuất hiện để làm việc, nhưng tôi thấy nó tấn công:
package MyApp::CGI;
use Moose;
use MooseX::NonMoose;
use base 'CGI::Application';
extends 'CGI::Application';
Tôi không biết đủ (hoặc bất cứ điều gì, thực sự) về internals Moose biết nếu điều này là một ý kiến hay.
BEGIN {extends ...}. – jrockway
(Đáng chú ý rằng "sử dụng" như một từ đồng nghĩa cho BEGIN là một mô hình phổ biến. Xem thêm: "sử dụng ok ...") – jrockway
jrockway: đó phải là câu trả lời, không phải là một chú thích – ysth