Thread Dispatch Table mit Objekten: Objektmethoden statt funktionen (8 answers)
Opened by Damokles at 2005-06-28 15:42

Damokles
 2005-06-28 15:42
#55759 #55759
User since
2005-06-28
7 Artikel
BenutzerIn
[default_avatar]
Hallo, ich möchte eine dispatch table mit methoden einer Klasse anstelle mit normalen funktionen haben. Es geht dabei um einen Paket Parser.

Normale dispatch tables sehen so aus.

Code: (dl )
1
2
3
4
5
6
7
8
%packets_processors = (
   ...,
   "0110" => \&skill_failed,
   "0114" => \&skill_used,
   "01DE" => \&skill_used,
   "0117" => \&skill_used_on_coordinates,
   ...
);


Da ich aber eine Klasse verwende, weil es verschiedene Server mit unterschiedlichen Paketen sein können, kann ich keine einfachen funktionsreferenzen machen. Mit eval geht es zwar, aber das würde den geschwindigkeitsvorteil der dispatch table gegenüber dem if-else switch wieder vernichten. Ich hab schon rausgefunden, dass man funktionen wie unten beschrieben auch ohne eval benutzen kann. Aber bei Objekten habe ich es noch nicht geschaft.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ cat call_function_by_name.pl 
use strict;

sub foo {
       my $arg = shift;

       print "You called foo($arg)\n";
}

my $bar = 'foo';
{
       no strict 'refs';
       &$bar(5);
}
$ perl call_function_by_name.pl
You called foo(5)


Wißt ihr einen weg?\n\n

<!--EDIT|Damokles|1119959014-->

View full thread Dispatch Table mit Objekten: Objektmethoden statt funktionen