gpt4 book ai didi

perl - 可以将 MooseX 模块与 Mouse 类一起使用吗?

转载 作者:行者123 更新时间:2023-12-01 23:25:27 25 4
gpt4 key购买 nike

我意识到这对于所有 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 联系起来?

最佳答案

使用 Mouse 的要点是可以访问 Moose 的大部分功能,同时消除其昂贵的启动时间和类似 Yggdrasil 的依赖树。如果您使用 MooseX 模块,该模块会引入 Moose,或者至少引入 Moose::Exporter/Moose::Role,然后您就失去了 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 除非Moose 已经存在已加载,在这种情况下它只会使用它。

关于perl - 可以将 MooseX 模块与 Mouse 类一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7647085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com