BUILD
如果方法失败,我希望我的班级爆炸。但是,如果我croak
用来处理错误,则会从Class/MOP/Method.pm
而不是调用者的代码中报告错误。(也就是说,实例化对象的调用者。) IOW,croak
在调用树上没有足够远。
看哪:
package Test;
use Moose;
use Carp 'croak';
sub BUILD {
croak 'u r dum';
}
1;
实例化Test
结果:
u r dum at /home/friedo/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/Class/MOP/Method.pm line 125
Carp.pm
应该注意调用的包变量@CARP_NOT
来知道要避免哪些包,但它似乎只注意列表中的一项。例如,如果我将此添加到我的Test.pm
:
our @CARP_NOT = ( 'Class::MOP::Method' );
那么结果是:
u r dum at /home/friedo/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/Moose/Object.pm line 59
所以我也应该将它添加到数组中,对吗?
our @CARP_NOT = ( 'Class::MOP::Method', 'Moose::Object' );
那么结果还是:
u r dum at /home/friedo/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/Moose/Object.pm line 59
Moose::Object
似乎不受影响。
一段时间以来,我一直在努力解决这个问题,但似乎无法弄清楚是什么搞砸了。
谢谢。