독립 실행 형 유틸리티 클래스 대신 부모 Moose 클래스 내에서 일부 도우미 메서드를 설정하는 방법을 찾고 있습니다. 가능하다면 모듈에 무스탕을 더 투명하게 추가 할 수 있습니다. 도우미 모듈을 명시 적으로 요구하지 않아도됩니다 (모든 것이 extends
선언을 통해 이루어짐).무스 오브젝트에서 Moose :: Exporter를 사용할 수있는 방법이 있습니까?
package Parent;
use Moose;
Moose::Exporter->setup_import_methods(
with_meta => [ 'has_rw' ],
as_is => [ 'thing' ],
also => 'Moose',
);
sub has_rw {
my ($meta, $name, %options) = @_;
$meta->add_attribute(
$name,
is => 'rw',
%options,
);
}
# then later ...
package Child;
use Moose;
extends 'Parent';
has 'name';
has_rw 'size';
thing;
을하지만이 작동하지 않습니다 :
perl -I. -MChild -wle'$obj = Child->new(size => 1); print $obj->size'
String found where operator expected at Child.pm line 10, near "has_rw 'size'" (Do you need to predeclare has_rw?) syntax error at Child.pm line 10, near "has_rw 'size'" Bareword "thing" not allowed while "strict subs" in use at Child.pm line 12. Compilation failed in require. BEGIN failed--compilation aborted.
PS
는 example provided in the documentation을 바탕으로, 이것은 내가 가고있는 무슨 약이다. 나는 또한 수출 마법을 역할 (extends Parent;
이 아닌 with Role;
이 아닌)로 옮기려고했지만 동일한 오류가 발생합니다.
내가 찾고 있었던 것은'Parent'와'MySugar'를 하나의 클래스로 결합하는 것입니다. 그 이유는 설탕이'부모 '에 정의 된 구성 요소를 기반으로 만들어 졌기 때문입니다. 그러나 그것들을 정의하고 따로 따로 가져가는 것은 세상 끝이 아닙니다. 나는 그것들을 분리 된 두 개의 컴포넌트로 분리하고 싶지 않습니다. 그들은 함께 데려 가야합니다. – Ether
넵, Moose :: Exporter를 사용하면 함께 가져올 수 있습니다. 그것들을 하나의 클래스에서 정의하는 것은 내 의견으로는 좋지 않은 생각이다. 왜냐하면 두 개의 다른 것들을 실제로 분리해야하기 때문이다. – perigrin
답변을 업데이트하여 권장 스타일을 사용하여 두 가지를 모두 도입하는 예를 포함 시켰습니다. 이보다 더 많은 것을 원한다면 irc.perl.org에 지난 #moose를지나 Moose 메일 링리스트에 특정 질문을하는 것이 좋습니다. – perigrin