Term::ReadLine::Stub::new(/usr/lib/perl5/5.8.8/Term/ReadLine.pm:243):
私はTerm::ReadLine::new
を見ることが予想されていましたが、これは一般的にはパッケージがnew
の場合です。PerlデバッガになぜTerm :: ReadLine :: Stub :: newが表示されるのですか?新しいTerm :: ReadLineが呼び出されると、なぜですか?
誰もがその理由を知っていますか?
Term::ReadLine::Stub::new(/usr/lib/perl5/5.8.8/Term/ReadLine.pm:243):
私はTerm::ReadLine::new
を見ることが予想されていましたが、これは一般的にはパッケージがnew
の場合です。PerlデバッガになぜTerm :: ReadLine :: Stub :: newが表示されるのですか?新しいTerm :: ReadLineが呼び出されると、なぜですか?
誰もがその理由を知っていますか?
これは継承です。用語:: Readlineのは、一番上にpackage Term::ReadLine::Stub
と一緒に始まり、その後package Term::ReadLine
内では、次のように表示されます。
our @ISA;
if (defined &Term::ReadLine::Gnu::readline) {
@ISA = qw(Term::ReadLine::Gnu Term::ReadLine::Stub);
} elsif (defined &Term::ReadLine::Perl::readline) {
@ISA = qw(Term::ReadLine::Perl Term::ReadLine::Stub);
} elsif (defined $which && defined &{"Term::ReadLine::$which\::readline"}) {
@ISA = "Term::ReadLine::$which";
} else {
@ISA = qw(Term::ReadLine::Stub);
}
サブnew()
はターム:: ReadLineメソッド::スタブ内に作成し、長期に継承さ:: ReadLineメソッド。
デバッガーは、実際にサブがどこから継承されているかを伝える場合に最も役立ちます。デバッガによってTerm :: ReadLineに指示され、new()を定義したものが見つかるまで、すべての@ISAレベルを調べなければならない場合はあまり役に立ちません。複数層継承(Perlのように)と複数の継承(Perlのように)を可能にするオブジェクトシステムの泥沼を想像してみてください。