如何将非OO函数模块包装到moose类中
几个月前,我开始使用驼鹿 我使用的一些非OO模块只是由相关函数组成的。我想在Moose类中使用这些函数作为方法。这可能是最简单的方法如何将非OO函数模块包装到moose类中,moose,Moose,几个月前,我开始使用驼鹿 我使用的一些非OO模块只是由相关函数组成的。我想在Moose类中使用这些函数作为方法。这可能是最简单的方法 #!/usr/bin/env perl package FuncPack; sub func_1 { print "-> ", __PACKAGE__, "::func_1 called \n"; } package FuncClass; use Moose; use namespace::autoclean; sub func_1 {
#!/usr/bin/env perl
package FuncPack;
sub func_1 {
print "-> ", __PACKAGE__, "::func_1 called \n";
}
package FuncClass;
use Moose;
use namespace::autoclean;
sub func_1 {
my $self = shift ;
return FuncPack::func_1(@_);
}
__PACKAGE__->meta->make_immutable;
package main;
my $obj = FuncClass->new();
$obj->func_1(); # shall call FuncPack::func_1
对于一个功能来说,这可能是可以的,但如果你有很多,这是一个重复的任务和无聊。
有没有更聪明的方法来实现它?可能有类似于MooseX::NonMoose或MooseX::InsideOut的东西用于扩展非Moose类
感谢您的建议或提示。Moose通常不会处理这个问题,在OO框架中包装非OO模块似乎有点奇怪。不过,若您有一个方法列表(或可以生成一个),您可以执行以下操作:
package FuncClass;
use Moose;
my @list = qw( func_1 func_2 func_3 ... );
for my $method in @list {
__PACKAGE__->meta->add_method(
$method => sub { my $s = shift; FuncPack::$method(@_)
});
}
您可以使用类似于Package::Stash
的方法从FuncPack
中拉出函数列表
我想知道你为什么要这么做?您的
FuncClass
将绝对不携带任何状态,并且除了添加一层间接寻址之外,实际上没有其他用途。谢谢。这就是我要找的。我的例子太简单了,只是为了弄清楚我需要什么。我现在还没碰过meta的东西。我想是时候了;-)。