Привет,
Как продолжение моего предыдущего вопроса о Музе, я столкнулся с новой проблемой. У меня есть класс Moose, который использует Recipe 12 для расширения родительского класса, не относящегося к Moose. Вот оно:
package MyApp::CGI;
### TODO: make this work with MooseX::Declare?
use Moose;
extends 'CGI::Application';
sub new {
my $class = shift;
my $obj = $class->SUPER::new( @_ );
return $class->meta->new_object( __INSTANCE__ => $obj, @_ );
}
sub setup {
my $self = shift;
$self->start_mode( 'main' );
my @methods = map { $_->name } $self->meta->get_all_methods;
$self->run_modes( map { /^rm_(.+)$/ => $_ }
grep { /^rm_/ }
@methods
);
}
Это прекрасно работает. У меня также есть подкласс этого класса, который использует MooseX::Declare
. Однако, поскольку я переопределяю конструктор Moose по умолчанию, мой подкласс выдает следующее предупреждение:
Not inlining 'new' for MyApp::CGI::Login since it is not inheriting the default Moose::Object::new
If you are certain you don't need to inline your constructor, specify inline_constructor => 0 in your call to MyApp::CGI::Login->meta->make_immutable
Поскольку MooseX::Declare
автоматически вызывает make_immutable
за кулисами, я не смог понять, как заставить его включить параметр inline_constructor => 0
.