저는 역할과 그 역할을 혼합 한 몇 가지 클래스가 있습니다. Role 클래스는 구현 클래스를 모두로드하여 Blah를 가져 오는 모든 것이 '사용'행을 많이 입력하지 않고도 사용할 수 있도록합니다.메서드 수정자를 사용하는 역할 응용 프로그램을 내 코드에서 작동시키지 않는 이유는 무엇입니까?
package Blah;
use Moose::Role;
use Blah::A;
use Blah::B;
(etc...)
requires '...';
requires 'foo';
around 'foo' => sub { ... }
전형적인 ㅋ 서브 클래스의 모든 서브 클래스 '갑'방법은 동일한 코드 비트 시작
package Blah::A;
use Moose;
with 'Blah';
sub foo { ... }
__PACKAGE__->meta->make_immutable;
때문에 역할도하는 방법을 통해 이러한 개질제를 구현한다.
문제는 다음과 같습니다. Moose가 메서드 수정자를 Blah :: * 클래스에 적용하지 않습니다. 클래스에 대한 make_immutable 호출을 제거해도이 문제가 발생합니다. 나는 역할 어플리케이션이 런타임에 완전히 완료되었다고 생각했기 때문에 Blah :: * 클래스가 Blah 전에로드 되었더라도 수정자를 여전히 적용해야합니까?
수정 프로그램이나 다른 방법을 찾고 있습니다. 순간에 Blah는 본질적으로 메서드 수정자를 제외하고는 추상적 인 기본 클래스이므로 역할을 처음 사용하는 이유는 무엇입니까 -하지만 클래스 계층 구조가 더 좋을까요? 미리 감사드립니다.
감사합니다.사용 라인은 짜증나지만, 롤 모듈에 과부하가 걸리지 않고 팩토리 모듈을 쓸 것입니다. :) – rjh
@rjh : 예, 역할을 수행하기 전에 너무 빨리 목표 모듈을로드하는 것입니다. 건물 자체를 완성하고 그 건물에 적용되게합니다. – Ether