Hier ist die aktuelle Methode:Ich versuche, eine Methode zu ändern, die eine Fehler String zurückgibt, so dass es einen Hash in Perl akzeptieren kann
sub new {
my ($package, $message) = (shift, shift);
my %params = @_;
return bless { message => $message, %params }, $package;
}
Diese Methode gibt grundsätzlich einen Fehlerstring, aber ich möchte ändern Es wird also auch in der Lage sein, meine neue Fehlerstruktur zu übernehmen und den String aus dem Fehler-Hash zurückzugeben. Ich kann nicht verstehen, wie man Segen benutzt. Die% Parameter akzeptieren Laufzeitparameter, aber sie können jetzt ignoriert werden, würde ich denken. Hier
ist die Fehlerstruktur:
# 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
},
};
Ich habe gerade angefangen, einige Codes zu werfen bis zu beginnen, es ist ein schlechter Versuch, aber das ist, wie ich begann den neuen() -Methode ändern:
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;
}
}
Mein Verständnis von Segen ist, dass es Objekt von Hash-Refs macht. Die Fehler werden in der Konstantenliste gehalten. Hier ist ein Beispiel dafür, wie es ausgeführt werden soll:
if(!device_model) {
die ARC::Builder::Error->new(CABLING_ERROR);
}
UPDATE: Ich habe zu Einheit versucht, testen Sie Ihre Lösung @simbabque aber ich halte einen leeren String als Rückgabewert bekommen statt der Fehlermeldung Zeichenfolge. Vielleicht ist es mein Test, dass es nicht richtig eingerichtet ist? Im Folgenden finden Sie ein Beispiel für den Test, den ich erstellt:
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');
Warum haben Sie eine Konstante? Bitte [bearbeiten] Sie Ihre Frage und fügen Sie einen Beispielaufruf für den Konstruktor mit Eingabe und Ausgabe hinzu. - Weißt du eigentlich überhaupt, was der "Segen" tut? Es hört sich nicht so an. Bitte versuchen Sie auch ein wenig mehr zu erklären, was dies zu tun hat und in welchem Kontext. Ich rieche ein X/Y-Problem. ;) – simbabque
@simbabque macht gute Punkte. Ich werde nur darauf hinweisen, dass * wenn * Sie einen konstanten Hash definieren müssen, sollten Sie ein Modul wie 'Const :: Fast' verwenden. Die oben definierten Felder von 'CABLING_ERROR' sind modifizierbar. Geben Sie auch Code ein, den andere leicht ausführen können. Dein Code sollte *** * keine * Syntaxfehler * enthalten, es sei denn, diese sind der Schwerpunkt deiner Frage. –
Sie verwenden besser [Exception :: Class] (https://metacpan.org/pod/Exception::Class) oder [Throwable :: Error] (https://metacpan.org/pod/Throwable::Error)) –