Thread Routinen erzeugen (18 answers)
Opened by bloonix at 2007-01-30 16:53

bloonix
 2007-01-31 10:48
#73847 #73847
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=Taulmarill,30.01.2007, 16:25]imho sollte man einen sehr guten grund haben, wenn man so was macht.[/quote]
Nun, ich habe eine Methode, die als zweites Argument einen Prefix
erwartet. Die Prefixe möchte ich gerne als Methoden zur Verfügung
stellen.

Zum Beispiel erwartet die Methode foobar() einen der 4 Prefixe FOO, BAR,
OOF, RAB:

Code: (dl )
1
2
3
4
$foo->foobar('FOO', $message);
$foo->foobar('BAR', $message);
$foo->foobar('OOF', $message);
$foo->foobar('RAB', $message);

Statt dessen möchte ich gerne die Prefixe als Methoden anbieten:

Code: (dl )
1
2
3
4
$foo->foo($message);
$foo->bar($message);
$foo->oof($message);
$foo->rab($message);


Meine Lösung wäre also, entweder alle Routinen mit

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sub foo {
  my $self = shift;
  return $self->foobar('FOO', @_);
}
sub bar {
  my $self = shift;
  return $self->foobar('BAR', @_);
}
sub oof {
  my $self = shift;
  return $self->foobar('OOF', @_);
}
sub rab {
  my $self = shift;
  return $self->foobar('RAB', @_);
}

zu erzeugen. Für jeden weiteren Prefix müsste ich eine weitere Sub auf
diese Weise erzeugen. Ich dachte mir daher, dass Ganze etwas abzukürzen
und in einer Schleife zu erledigen:

Code: (dl )
1
2
3
4
5
6
7
BEGIN {
  no strict 'refs';
  for my $prefix (qw(FOO BAR OOF RAB)) {
     my $sub = lc($prefix);
     *{$sub} = sub { my $self = shift; return $self->foobar($prefix, @_) }
  }
}


Was würde dagegen sprechen?

Danke übrigens für die Hilfe!\n\n

<!--EDIT|opi|1170233315-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.

View full thread Routinen erzeugen