Ich glaube, die kanonische Weise der Eltern Klasse Konstruktor in Perl zu nennen ist:Wie rufe ich den Konstruktor des Großelterns auf (weil der Konstruktor des Elternteils nicht definiert ist)?
package Child;
our @ISA = 'Parent';
sub new {
my $class = shift;
my @args = @_;
my $self = $class->SUPER::new(@args);
return $self;
}
jedoch dieses Konstrukt scheint nicht zu funktionieren, wenn Parent
nicht explizit eine Definition new
Funktion (aber Grandparent
tut) .
Dies ist zum Beispiel der Fall mit Net::FTP::File
.
tq84_ftp.pm
:
package tq84_ftp;
use warnings;
use strict;
our @ISA = qw(Net::FTP::File);
sub new {
my $class = shift;
my $self = $class->SUPER::new('localhost')
or die([email protected]);
return $self;
}
1;
script.pl
:
use tq84_ftp;
tq84_ftp->new();
Ausgang:
Can't locate package Net::FTP::File for @tq84_ftp::ISA at tq84_ftp.pm line 10.
Can't locate package Net::FTP::File for @tq84_ftp::ISA at tq84_ftp.pm line 10.
Can't locate object method "new" via package "tq84_ftp" at tq84_ftp.pm line 10.
Wie kann ich angeben, dass ich Perl die richtige (hier: grantparent ist) finden wollen new
Funktion ?
Sie sollten wirklich nicht diese fragen. Natürlich ist es möglich, da die meisten Dinge in Perl sind. Aber das Design Ihrer Klassenstruktur ist sehr fehlerhaft und Sie sollten nicht Code schreiben, um es zu umgehen. – Borodin
Sie können mir sicherlich helfen, mich darauf hinzuweisen, was ich stattdessen fragen sollte. –
Sie benötigen Hilfe bei Ihrer Klassenstruktur. Wenn Sie wirklich nicht wissen, wie Sie vorgehen sollen, müssen Sie Ihren gesamten relevanten Code veröffentlichen. Höchstwahrscheinlich müssen Sie einen Auftragnehmer beschäftigen. Wenn es nur eine oder zwei Klassen gibt, können wir Ihnen vielleicht helfen, wenn Sie alles zeigen, was Sie haben, aber ich denke, das ist unwahrscheinlich. – Borodin