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