Можно ли использовать модули MooseX с классом Mouse? - PullRequest
3 голосов
/ 04 октября 2011

Я понимаю, что это не всегда возможно для всех модулей MooseX, особенно когда модуль углубляется в мета-класс, где Moose и Mouse различаются.

Но этот вопрос возник, потому что иногда модуль MooseX неэквивалент в пространстве имен MouseX, и я обнаружил, что все еще могу использовать модуль MooseX в своих классах Mouse.Но я хочу задать этот вопрос в целом, даже если есть доступный эквивалент 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 Ответ

5 голосов
/ 04 октября 2011

Смысл использования 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 уже загружен, в этом случае он просто будет использовать это.

...