Можно ли использовать модули MooseX с классом мыши?


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

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

Итак, если у нас есть класс мыши и выбор использования эквивалентных модулей MooseX и MouseX, какие причины мы будем использовать? нужно выбрать опцию MouseX? Зачем вообще нужен эквивалент MouseX?

Кстати, как мы должны относиться к этому с Any::Moose?

1 3

1 ответ:

Смысл использования Mouse состоит в том, чтобы иметь доступ к большинству функций Moose, устраняя при этом его дорогостоящее время запуска и иггдрасилоподобное дерево зависимостей. Если вы используете модуль 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 уже не загружен, и в этом случае он будет просто использовать это.