Thread Jeder kennt Traits
(54 answers)
Opened by rosti at 2018-11-06 11:05
Genau, da haben wir ja die Instanz, danke Dir!!
Und was Exception::Class betrifft: Ich baue gerade eine abgespeckte Version für mein FW. Aber nicht als Klasse sondern als Trait. So ist die Exception Klasse die beim Wurf angegeben wird, nur eine virtuelle Klasse. Der Trait sieht bisher so aus; Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 # Trait for Handle Excepions via virtuell Exception Classes use strict; use warnings; use Devel::StackTrace; # FW Methode sub throw{ my $self = shift; my $class = shift; my $msg = shift; eval{ die "$msg\n" }; chomp $@; $self->{exceptions}{$class} = { error => $@, trace => Devel::StackTrace->new }; die "$msg\n"; } # FW Methode sub caught{ my $self = shift; my $class = shift; bless $self->{exceptions}{$class}, __PACKAGE__; } # EX Methode sub error{ my $self = shift; $self->{error}; } # EX Methode sub trace{ my $self = shift; $self->{trace}->as_string; } 1; Ist aber noch nicht fertig, da fehlt noch die Fehlerbehandlung. Charakteristisch für einen Trait auch, daß er Methoden für Instanzen verschiedener Klassen definiert. Welche das sind hab ich mal kommentiert. Beim Aufruf also kannst Du hiermit die Exceptions klassifizieren: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 use throw; # Trait $, = "\n"; my $main = bless{}; try{ $main->throw('MyExClass',"Invalid!"); } catch{ my $exa = $main->caught('MyExClass'); print $exa->error, $exa->trace; }; und im catch prüfen ob es eine Ex einer bestimmten Exklasse gab. . Last edited: 2018-11-16 11:04:10 +0100 (CET) |