Ich habe zwei Möglichkeiten gesehen, die new
Methode in einer abgeleiteten Klasse.
Methode eins:
sub new {
my $invocant = shift;
my $class = ref($invocant) || $invocant;
my $self = {};
bless($self, $class);
$self = $self->SUPER::new( @_ );
return($self);
}
Methode zwei:
sub new {
my $self = shift;
my $class = ref($self) || $self;
return $self if ref $self;
my $base_object = $class->SUPER::new(@_);
return bless ($base_object, $class);
}
Ich bin mir nicht sicher, ob ich verstehe, worin der Unterschied besteht. Kann mir das bitte jemand erklären?
Aus Ihren Kommentaren und Antworten kann ich entnehmen, dass die ref()
Teil ist schlecht.
Aber was ist mit der Verwendung von SUPER::new(@_)
? Im ersten Beispiel wird der Hashref in der abgeleiteten Klasse gesegnet und dann wird das Objekt SUPER
's new
aufgerufen und in demselben Objekt gespeichert wird.
Im zweiten Beispiel hingegen wird ein Basisobjekt aus der Klasse SUPER
s new
Methode, und diese wird in die neue Klasse aufgenommen.
Worin besteht der Unterschied zwischen diesen beiden Möglichkeiten? Es sieht so aus, als ob die erste Methode das Objekt mit dem Basisobjekt überschreibt. Die zweite scheint "doppelt zu segnen". Ich bin verwirrt.