akım yöntemdir:Perl ile yazılan bir karma kabul edebilmesi için bir hata dizesini döndüren bir yöntem değiştirmeye çalışıyorum
sub new {
my ($package, $message) = (shift, shift);
my %params = @_;
return bless { message => $message, %params }, $package;
}
Bu yöntem temelde bir hata dize döndürür ama değiştirmek istediğiniz Bu yüzden yeni hata yapmamı alıp dizeyi hata karmasından geri gönderebilir. Kafamı nasıl koruyacağımı anlayamıyorum. % param çalışma zamanı parametresini kabul eder ancak şimdilik göz ardı edilebilir. İşte
hata yapısı şöyledir: Sadece, yetersiz kalan denemesi başlatmak için bazı kodlar aşağı atmaya başladı# 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
},
};
ama yeni() yöntemini değiştirerek nasıl başladığını şudur:
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;
}
}
Benim nimet anlayışım, onun hash refs nesnesini kılan olmasıdır. Hatalar sabit listede tutulur. İşte infaz edilmesi için ne kadar bir örnektir:
if(!device_model) {
die ARC::Builder::Error->new(CABLING_ERROR);
}
GÜNCELLEME: Ben birimine çalışıyorlar çözüm @simbabque sınamak ama bunun yerine hata mesajının bir dönüş değeri olarak boş bir dize almaya devam dize. Belki de benim testim doğru kurulmamış mı?
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');
Neden sabitiniz var? Lütfen sorunuz [değiştir] ve giriş ve çıkış ile yapıcı için örnek bir çağrı ekleyin. - Aslında, "korusun" un ne yaptığını biliyor musun? Bu böyle gelmiyor. Lütfen bunun ne yapacağını ve hangi bağlamda olduğunu biraz daha açıklamaya çalışın. Bir X/Y problemi kokusu alıyorum. ;) – simbabque
@simbabque iyi puanlar veriyor. Ben sadece şunu söyleyeyim * eğer * sabit bir karma tanımlamanız gerekiyorsa, 'Const :: Fast' gibi bir modül kullanmalısınız. Yukarıda tanımlanan "CABLING_ERROR" alanları değiştirilebilir. Ayrıca, başkalarının kolayca çalıştırabilirsiniz posta kodu. Sorunuzun odağı olmadıkça, kodunuz *** * sözdizimi hatası * içermemelidir *. –
[Exception :: Class] (https://metacpan.org/pod/Exception::Class) veya [Throwable :: Error] (https://metacpan.org/pod/Throwable::Error) kullanmaktan daha iyidir.) –