我認爲,規範的方法來調用父類的構造函數中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