속성의 작성기 메서드에 대한 참조를 다른 클래스 메서드에 전달하려고합니다. setter 메서드는 print 문이 실행 된 이후 명백하게 호출됩니다. 그러나 다음과 같은 오류 결과 :속성의 작성기 메서드에 대한 참조를 호출 할 때 Perl 무스 예외가 발생했습니다.
Attribute (dir) is required, so cannot be set to undef at Test.pm line 51
Test::_validateDir('Test=HASH(0x2270be0)', 'CODE(0x22a90f8)') called at test.pm line 37
Test::BUILD('test_moose=HASH(0x2270be0)', 'HASH(0x1879728)') called at generated method (unknown origin) line 50
Test:new('Test', dir=>'my_bin') called at ./test_moose.pl line 26
생성 된 작가 방법에 대한 참조를 취할 수 없거나 무스에서이 작업을 수행하는 다른 또는 더 나은 방법이 이유가 있습니까?
package Test;
use Moose;
use File::Spec;
has 'dir' => (is => 'ro', isa => 'Str', required => 1, writer '_set_dir',);
sub BUILD {
my ($self, $hr) = @_;
$self->_validateDir(\&_set_dir);
}
sub _validate_dir {
my ($self, $setter) = @_;
my $dir = File::Spec->rel2abs($self->dir, '/home/me');
if (! -e $dir) {
print "creating directory\n";
#create directory
}
&$setter($dir);
}
그건 문제가되었습니다. 좋은 캐치! – roadrider
나는 당신의 답을 지금 삭제 취소했다. 아마도 주석처럼 보이기 위해 (다시) 삭제되지 않도록 다시 말해야한다. 또한 재미있는 읽을 거리 : http://meta.stackexchange.com/questions/131959/should-i-not-flag-a-rhetorical-question-posted-as-an-answer – BoltClock
아, 고마워! 나는 분명히 대답을 시도하는 수사 학적 질문을 삭제하는 것처럼 언어에 대해 너무 항문적이어야한다고 생각하지 않습니다. – zoul