perl – 处理Moose中的多继承构造函数
发布时间:2020-12-15 22:06:32 所属栏目:大数据 来源:网络整理
导读:问候, 我正在学习Moose并且我正在尝试用Moose编写一个CGI::Application子类,由于CGI-App不是基于Moose而变得困难. 在我的其他CGI-App子类中,我喜欢使用一个设置方法的父类,该方法查看子类的符号表并自动设置runmodes.我想我可以使用Moose的元类设施以更清洁
|
问候,
我正在学习Moose并且我正在尝试用Moose编写一个CGI::Application子类,由于CGI-App不是基于Moose而变得困难. 在我的其他CGI-App子类中,我喜欢使用一个设置方法的父类,该方法查看子类的符号表并自动设置runmodes.我想我可以使用Moose的元类设施以更清洁的方式实现同??样的目的.所以这是我在父类中的内容: use MooseX::Declare;
class MyApp::CGI
extends Moose::Object
extends CGI::Application {
method setup {
$self->start_mode( 'main' );
my @methods = map { $_->name } $self->meta->get_all_methods;
$self->run_modes( map { /^rm_(.+)$/ => $_ }
grep { /^rm_/ }
@methods
);
}
}
……在我的孩子班上: use MooseX::Declare;
class MyApp::CGI::Login
extends MyApp::CGI {
method rm_main {
return "it works";
}
}
我意识到我的runmodes没有正确设置的原因是因为CGI-App构造函数调用了setup,而Moose :: Object在我的类中坚持自己的构造函数.我尝试用方法修饰符解决这个问题: around new {
$self = $orig->( @_ );
$self->CGI::Application::new( @_ );
}
这给了我 Can't call method "BUILDARGS" on unblessed reference at ...Moose/Object.pm line 21. 然而,我有一种感觉,我是以完全错误的方式解决这个问题,而且Moose有更好的设施来实现我想要的,我还没有发现. 解决方法
你已经看过
Moose::Cookbook::Basics::DateTime_ExtendingNonMooseParent和
MooseX::NonMoose了吗?
更新:我对Moose和各种技术不太熟悉.我无法使用MooseX :: Declare和MooseX :: NonMoose一起编译模块.但是,这里似乎有用: 应用程序基类 package My::App;
use Moose;
use MooseX::NonMoose;
extends 'CGI::Application';
sub setup {
my $self = shift;
$self->start_mode( 'main' );
$self->run_modes(
map { $_ = $_->name;
/^rm_ (?<rm>.+) $/x ? ( $+{rm} => $_ ) : ()
} $self->meta->get_all_methods
);
}
"My::App"
派生类 package My::Login;
use Moose;
extends 'My::App';
sub rm_main { 'it works!' }
"My::Login"
脚本 #!/usr/bin/perl use strict; use warnings; # For testing on the command line use FindBin qw( $Bin ); use lib $Bin; use My::Login; my $app = My::Login->new; $app->run; 产量 C:Tempf> t Content-Type: text/html; charset=ISO-8859-1 it works! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
