这是当前的方法:
sub new {
my ($package, $message) = (shift, shift);
my %params = @_;
return bless { message => $message, %params }, $package;
}
此方法基本上返回一个错误字符串,但我想对其进行修改,以便它也能够采用我的新错误结构并从错误哈希中返回字符串。我无法理解如何使用祝福。%params 接受运行时参数,但我认为现在可以忽略它们。
这是错误结构:
# this constant is an example of an error library (just included 1 error for example)
use constant {
CABLING_ERROR => {
errorCode => 561,
message => "Cabling incorrect to device in server A4r, contact DCT ",
tt => { template => 'cable'},
fatal => 1,
link =>'http://www.error-fix.com/cabling
},
};
我刚开始写一些代码来启动,这是一个糟糕的尝试,但这就是我开始修改 new() 方法的方式:
sub new {
my ($package, $message) = (shift, shift);
# defining new error hash
my $hash($errorCode, $message, $tt, $fatal, $link) = (shift, shift, shift, shift);
my %params = @_;
if(exists $hash->{errorCode}) {
return bless { errorCode => $errorCode, message => $message, tt => $tt, fatal => $fatal, link => $link}, %params;
}
else {
return bless { message => $message, %params }, $package;
}
}
我对 bless 的理解是它使哈希引用成为对象。错误保存在常量列表中。这是如何执行的示例:
if(!device_model) {
die ARC::Builder::Error->new(CABLING_ERROR);
}
更新:我一直在尝试对您的解决方案 @simbabque 进行单元测试,但我不断得到一个空字符串作为返回值,而不是错误消息字符串。也许这是我的测试,它没有正确设置?下面是我创建的测试示例:
my $error = CABLING_ERROR;
my $exp_out_A = ($error->{message});
my $error_in = new($error);
diag($error_in);
is($error_in, $exp_out_A, 'Correct message output');