저는 방금 Moose와 그 훌륭한 OO 프레임 워크를 사용하기 시작할뿐만 아니라 새로운 OO 개념을 배우기 시작했습니다. 내가하고 싶은 일 중 하나는 객체 생성 중에 호출자의 관점에서 오류보고를하는 것입니다. 나는 Moose가 moose :: Error :: Croak 모듈을 가지고있는 것을 보았다. 이것은 Moose가 croak 호출에 의한 디폴트 에러보고를 무시하도록 알려준다. 나는 그것을 사용하지만, 도움을 보이지 않았다Moose :: Error :: 호출자의 관점에서보고하지 못하는 오류가 발생했습니다.
무스 코드 - Foo.pm
package Foo;
use metaclass (
metaclass => 'Moose::Meta::Class',
error_class => 'Moose::Error::Croak',
);
use Moose;
has 'attr1' => (
is => 'rw',
isa => 'Str',
required => '1',
);
no Moose;
1;
무스 코드 - fooser.pl
이 오류와 함께 실패#!/usr/bin/perl
use strict;
use warnings;
use Foo;
my $foobj = Foo->new();
: 속성 (ATTR1) /usr/local/lib/perl/5.8.8/Class/MOP/Class.pm 라인 364
은 Moose :: Error :: Croak가 사용되지 않는 경우 실제 스택 추적보다 간결합니다. 그러나 발신자의 관점에서보고하지는 않습니다. 이 펄 5 OO 코드를했고 나는대로 Foo.pm이 있다면 :
package Foo;
use strict;
use warnings;
use Carp;
sub new {
my ($class, %args) = @_;
my $self = {};
if (! exists $args{'attr1'}) {
croak "ERR: did not provide attr1";
}
$self->{'attr1'} = $args{attr1};
bless $self, $class;
return $self;
}
1;
그리고 fooser.pl이 실행 된 경우 나 오류를 가지고 것 :
"ERR : fooser에서 ATTR1를 제공하지 않았다 .pl line 6 "
발신자의 관점에서 볼 때, 회선 번호를 가리 킵니다. 6 of fooser.pl보다는 MOP.pm의 라인 번호. 364.
어떻게 이것을 무스에서 할 수 있습니까? 아니면 내가 여기서 뭔가를 오해하고있는 것입니까?
고뇌 대신 고백을 사용하십시오. 어떤 것이 기본값입니다. – jrockway
기본값은 도움이되지 않습니다. 호출자가되는 마지막 항목과 함께 전체 추적을 제공합니다. 오류를 로깅 할 때 오류가 호출되는 경우에는 무스 레벨 추적을 기록하는 것이 유용하지 않습니다. –