2011-10-04 4 views
3

저는 이것이 모든 무스 X 모듈에서 일반적으로 가능하지 않다는 것을 알고 있습니다. 특히 모듈이 무스와 마우스가 다른 메타 클래스를 탐구하는 곳에서는 더욱 그렇습니다.마우스 클래스와 함께 MooseX 모듈을 사용해도됩니까?

하지만이 질문은 때때로 MooseX 모듈에 MouseX 네임 스페이스에 해당 항목이 없기 때문에 마우스 클래스 내에서 MooseX 모듈을 사용할 수 있음을 발견했습니다. 그러나 MouseX와 동일한 기능을 사용할 수 있다고하더라도이 질문을하고 싶습니다. (MouseX를 설치하기에는 너무 게을 리거나 새로운 기능이 추가 된 MooseX 버전이 더 좋다고 가정 해 봅시다).

는 예를 들어, 다음은 유효합니다

package Foo; 
use Mouse; 
use MooseX::Types::Common::Numeric 'PositiveInt'; 
has 'bar' => (
    is => 'rw', 
    isa => PositiveInt, 
); 

종속성입니다 MouseX :: 유형의 차이가 있었다 비록 내가 거의 MooseX::Types::Common::Numeric의 정확한 복사본이었다 MouseX::Types::Common::Numeric 소스로 보았을 때. Perl 코드이므로 MouseX 모듈을 사용할 때 특별한 성능상의 이점이 없습니다.

Mouse 클래스가 있고 이에 상응하는 MooseX 및 MouseX 모듈을 사용하는 경우 MouseX 옵션을 선택해야하는 이유는 무엇입니까? MouseX를 사용하는 이유는 무엇입니까?

btw, 우리는 Any::Moose과 어떻게 관련이 있습니까?

답변

5

Mouse을 사용하는 지점은 값 비싼 시작 시간과 Yggdrasil 유사 종속성 트리를 제거하면서 Moose의 대부분 기능에 액세스해야합니다. MooseX 모듈을 함께 사용하는 경우 해당 모듈은 Moose 또는 적어도 Moose::Exporter/Moose::Role이되므로 Mouse의 이점을 제거한 것입니다. 준수 :

[email protected]:~$ time perl -MMouse -e 1 

real 0m0.026s 
user 0m0.020s 
sys  0m0.000s 

[email protected]:~$ time perl -MMouse -MMouseX::Types::Common::Numeric -e 1 

real 0m0.032s 
user 0m0.030s 
sys  0m0.000s 

너무 빠릅니다! 하지만 :

[email protected]:~$ time perl -MMoose -e 1 

real 0m0.148s 
user 0m0.120s 
sys  0m0.020s 

[email protected]:~$ time perl -MMouse -MMooseX::Types::Common::Numeric -e 1 

real 0m0.181s 
user 0m0.150s 
sys  0m0.020s 

너무 느립니다. 그러나 그 시작 시간이 당신이하고있는 일에 상관 없다면, 처음에는 Mouse으로 귀찮게해서는 안됩니다. 이 경우는 단지를 사용합니다

Any::Moose

Moose 지향 모듈이 Mouse Moose하지 않는 한 이미로드되어 사용할 수 있도록하기 위해 존재한다.

관련 문제