Thread Methoden erweitern (3 answers)
Opened by rosti at 2012-08-23 09:57

topeg
 2012-08-23 13:29
#161288 #161288
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Sauber ist es zu Erben und die Methode in der Kindklasse zu überschreiben.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package Class::myIrgendwas;
use strict;
use warnings;
use parent 'Class::Irgendwas';

sub method
{
  my $self=shift;
  return $self->Super::method(@_) if(@_==1);

  my $val1=shift;
  my $val2=shift;

  # ...

  return #...
}

Das hilft auch bei der Dokumentation der Veränderungen.

Aber...

Bei Perl sind die Namensräume kaum geschützt, weshalb man Funktionen und Methoden leicht überschreiben kann.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use Class::Irgendwas;
BEGIN
{
  # alte Methode sichern
  my $ref=\&Class::Irgedndwas::method;

  # überschreiben mit neuer Methode
  *Class::Irgedndwas::method=sub
  {
    return $ref->(@_) if(@_==2);
    my $self=shift;
    my $val1=shift;
    my $val2=shift;

    # ...

    return #...
  }
}


Das kann auch zu Problemen führen, wenn andere Module das auch machen, oder sich darauf verlassen dass immer nur ein Wert verarbeitet wird $obj->method(@zeug). Die Gefahr das etwas schief läuft ist da.

Ich benutze das nur um Fehler zu korrigieren, bis das Modul aktualisiert wird.

View full thread Methoden erweitern