是否可以将MooseX模块与Mouse类一起使用?

时间:2011-10-04 11:19:53

标签: perl moose

我意识到所有MooseX模块通常都不可能,特别是当模块深入研究Moose和Mouse不同的元类时。

但是这个问题出现了,因为有时MooseX模块在MouseX命名空间中没有等效物,我发现我仍然可以在我的Mouse类中使用MooseX模块。但是我想问一般这个问题,即使有一个可用的MouseX(假设我太懒了,不能安装MouseX,或者MooseX版本是新版本的新功能)。

例如,以下内容有效:

package Foo;
use Mouse;
use MooseX::Types::Common::Numeric 'PositiveInt';
has 'bar' => (
    is => 'rw',
    isa => PositiveInt,
);

当我查看MouseX::Types::Common::Numeric源时,它几乎是MooseX::Types::Common::Numeric的精确副本,尽管MouseX :: Types中存在差异,这是一个依赖项。由于它是perl代码,因此使用MouseX模块也没有特别的性能优势。

因此,如果我们有一个Mouse类并且可以选择使用等效的MooseX和MouseX模块,那么我们选择MouseX选项的原因是什么?为什么MouseX等价呢?

顺便问一下,我们应该如何与Any::Moose

相关联

1 个答案:

答案 0 :(得分:5)

使用Mouse的目的是访问Moose的大部分功能,同时消除其昂贵的启动时间和类似Yggdrasil的依赖树。如果您使用MooseX模块,该模块会引入Moose或至少Moose::Exporter / Moose::Role,然后您就会消除{ {1}}。观察:

Mouse

太快了!但那时:

rsimoes@desk-o-simoes:~$ time perl -MMouse -e 1

real    0m0.026s
user    0m0.020s
sys     0m0.000s

rsimoes@desk-o-simoes:~$ time perl -MMouse -MMouseX::Types::Common::Numeric -e 1

real    0m0.032s
user    0m0.030s
sys     0m0.000s

太慢了。但是如果这些创业时间对你正在做的事情无关紧要,你甚至不应该为rsimoes@desk-o-simoes:~$ time perl -MMoose -e 1 real 0m0.148s user 0m0.120s sys 0m0.020s rsimoes@desk-o-simoes:~$ time perl -MMouse -MMooseX::Types::Common::Numeric -e 1 real 0m0.181s user 0m0.150s sys 0m0.020s 开始烦恼。

Mouse允许面向Any::Moose的模块使用Moose,除非已加载Mouse,在这种情况下它只会使用它。

相关问题