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