我认为,规范的方法来调用父类的构造函数中Perl是:如何调用祖父母的构造函数(因为父母的构造函数没有定义)?
package Child;
our @ISA = 'Parent';
sub new {
my $class = shift;
my @args = @_;
my $self = $class->SUPER::new(@args);
return $self;
}
然而,这种结构似乎并没有工作,如果Parent
没有明确地定义一个new
功能(但Grandparent
一样) 。
这种情况,例如,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();
输出:
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.
如何指定我想要Perl找到正确的(这里:grantparent的)new
功能?
你真的不应该问这个。当然,这是可能的,因为大多数事情都在Perl中。但是你的类结构的设计是错误的,你不应该编写代码来绕过它。 – Borodin
你当然可以帮助我指出我应该改为什么。 –
您需要关于您的班级结构的帮助,如果您真的不知道如何着手,则需要发布您的所有相关代码。很可能你需要雇佣一个承包商。如果只有一两个班级,那么如果你展示你所拥有的一切,我们可能会在这里帮助你,但我认为这不太可能。 – Borodin