Thread Problem mit Klassen
(6 answers)
Opened by Gast at 2008-07-29 01:43
Hallo,
Die Klasse module_proto soll ein generisches Datenmodul beschreiben, das eine Reihe von Grundfunktionalitäten mitbringt, hier etwa 'list' und 'edit'. 'list' ist der Input für _handle_event(), welche über $Self->{'ActionHash'} die zugehörige Funktion list_all() findet und aufruft. Die abgeleitete Klasse module_sources definiert list_all() neu und wird wie gewünscht mittels 'list' aufgerufen. Mit 'edit' soll aber edit_one() in module_proto aufgerufen werden. Das klappt nicht und ich denke, es kann auch garnicht! Wie kann ich es richtig machen??? Danke! Die total abgespeckten Klassen: 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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 package classes::module_proto; our %ActionsHash = ( "list" => { 'postaction' => \&list_all, }, "edit" => { 'postaction' => \&edit_one, }, ); sub new { my ($pkg, $name ) = @_; #------------------ my $Self = {}; #------------------ bless( $Self, (ref $pkg || $pkg) ); $Self->{'ActionHash'} = \%ActionsHash; # ... return $Self; } sub _handle_event { my $Self = shift; my $action = shift; # ... my $func = $actionshash->{ $action }->{'postaction'} ; # ... ($result, $error) = $func->(@_) ; # ... return ($result, $error); } sub edit_one { my $Self = shift; # ... return ( 1, undef); } sub list_all { my $Self = shift; # ... return ( 1, undef); } #------- package classes::module_sources; use classes::module_proto; our @ISA = qw(classes::module_proto); my %SourcesActionsHash = ( "list" => { 'postaction' => \&list_all, }, "edit" => { 'postaction' => \&edit_one, }, ); sub new { my ($pkg, $name ) = @_; #------------------ my $Self = $pkg->SUPER::new( $name ); bless( $Self, (ref $pkg || $pkg) ); $Self->{'ActionHash'} = \%SourcesActionsHash; return $Self; } sub list_all { my $Self = shift; # ... tu etwas spezielles mit sources return ( 1, undef); } #------- 1; |