什么是Perl中`使用base`和@ISA之间的区别?(What's the differe

2019-08-03 17:17发布

我要让延伸DBI一个单独的类。 我应该做这样的事情:

use base 'Class::Singleton';
our @ISA = ('DBI');

或这个:

our @ISA = ('Class::Singleton', 'DBI');

或者是其他东西?

真的不知道“基地使用”和“ISA”之间的区别是什么。

Answer 1:

典型的使用@ISA

package Foo;

require Bar;
our @ISA = qw/Bar/;

所述baseparent编译指示既加载所请求的类和修改@ISA到包含它:

package Foo;

use base qw/Bar/;

如果你想多继承,你可以提供一个以上的模块baseparent

package Foo;

use parent qw/Bar Baz/; #@ISA is now ("Bar", "Baz");

parent编译为新的和Perl 5.10.1,但它是从CPAN安装,如果你有Perl的一个旧版本。 它的建立,因为base编译已因难以维持“那个曾在其积累的残余。” 你不应该看到两者之间的基本使用差别。



Answer 2:

我想你应该使用parent编译,而不是base作为已被提出perldoc base



Answer 3:

从基本的的perldoc ...

package Baz;

use base qw( Foo Bar );

基本上等同于

package Baz;

BEGIN {
   require Foo;
   require Bar;
   push @ISA, qw(Foo Bar);
}

就个人而言,我使用基地。



Answer 4:

如果你想继承父类,那么你就需要加载和修改@ISA。 这两个步骤的照顾,当您使用基地。 基地加载模块,为您和相应地修改@ISA。 否则,你将需要修改@ISA并加载在自己的父模块。

下面两个是等价的:

use base "Parent";

require Parent;
@ISA = ("Parent");


文章来源: What's the difference between `use base` and @ISA in Perl?
标签: perl oop