역할을 사용하여 Moose에 구현 된 클래스 및 인터페이스 집합을 작성했습니다. 내가 이해하는데 어려움을 겪고있는 것은 무스 특성과 역할의 사용과 구현의 정확한 차이입니다.무스에서 역할과 형질은 어떻게 다릅니 까?
Moose documentation 상태 :
역할과 특성이 똑같은 것을 이해하는 것이 중요합니다. 역할은 특성으로 사용될 수 있고 특성은 역할입니다. 두 가지를 구별하는 유일한 점은 특성이 짧은 이름을 클래스 이름으로 해석 할 수있는 방법으로 패키지되어 있다는 것입니다. 바꾸어 말하면, 호출자는 "Big"과 같은 짧은 이름으로 참조 할 수 있습니다. Moose는이를 MooseX :: Embiggen :: Meta :: Attribute :: Role :: Big와 같은 클래스로 변환합니다.
특성과 역할은 "동일합니다"라고 알고 있습니다. 그러나, use Moose -traits 'Foo'
구문을 사용하여 아이디어의 기본 테스트를 구현할 때 내가 기대하는 것처럼 보이지 않습니다. 확실하게 나는 여기에서 무엇인가 놓치고있을 것임에 틀림 없다.
package MyApp::Meta::Class::Trait::HasTable;
use Moose::Role;
sub foo { warn 'foo' }
package Moose::Meta::Class::Custom::Trait::HasTable;
sub register_implementation { 'MyApp::Meta::Class::Trait::HasTable' }
package MyApp::User;
use Moose;
with 'MyApp::Meta::Class::Trait::HasTable';
__PACKAGE__->foo(); #foo
고마워, 그게 내가보고 있던 행동을 설명해 준다. – Danny
이 차이를 약간 반영하기 위해 Extending/Recipe1.pod의 텍스트를 업데이트했습니다. 또한 것들을 혼란스럽게하는 참고 사항 Scala와 같은 다른 언어에서는 역할과 비슷한 것을 Traits이라 부릅니다. 이러한 특성은 Moose의 역할 구현의 기원을 알 수 있지만 상태 전달 기능이 부족한 일부 논문에서 정의됩니다 (즉, 메소드는 속성이며 속성이 없습니다). – perigrin