我想做一个扩展DBI的单例类。我应该做这样的事情:在Perl中`use base`和@ISA有什么区别?
use base 'Class::Singleton';
our @ISA = ('DBI');
或本:
our @ISA = ('Class::Singleton', 'DBI');
或其他什么东西?
不确定'use base'和'isa'之间的区别是什么。
我想做一个扩展DBI的单例类。我应该做这样的事情:在Perl中`use base`和@ISA有什么区别?
use base 'Class::Singleton';
our @ISA = ('DBI');
或本:
our @ISA = ('Class::Singleton', 'DBI');
或其他什么东西?
不确定'use base'和'isa'之间的区别是什么。
我想你应该使用parent
编译指示而不是base
,正如perldoc base
中所建议的那样。
5.10是'父'吗?它必须是,因为它不在我的5.8文档中。 – Ether 2009-09-04 16:56:47
我不确定。然而,引用Chas的声明:“... Perl 5.10.1的父编译器是新的,但如果您有旧版Perl,则可以从CPAN安装...” – 2009-09-04 17:11:41
的典型用途@ISA
是
package Foo;
require Bar;
our @ISA = qw/Bar/;
的base
和parent
编译指示都加载所请求的类,并修改@ISA
包括它:
package Foo;
use base qw/Bar/;
如果你想多继承,您可以提供多于一个模块至base
或parent
:
package Foo;
use parent qw/Bar Baz/; #@ISA is now ("Bar", "Baz");
parent
pragma是Perl 5.10.1中的新增功能,但如果您有较旧版本的Perl,则可以从CPAN安装。它的创建是因为base
编译指示由于“积累在其中的残留物”而难以维护。你不应该在两者之间的基本用途上看到不同。
从底座的的perldoc ...
package Baz;
use base qw(Foo Bar);
基本上等同于
package Baz;
BEGIN {
require Foo;
require Bar;
push @ISA, qw(Foo Bar);
}
就个人而言,我使用基地。
最新的base.pm告诉人们使用5.10.1中的父亲。 :) – 2009-09-04 16:32:57
如果你想继承父类,那么你需要加载它并修改@ISA。当您使用Base时,这两个步骤都会照顾到。 Base会为您加载模块并相应地修改@ISA。否则,您需要修改@ISA并自行加载父模块。
下面的两个是等价的:
use base "Parent";
和
require Parent;
@ISA = ("Parent");
好了,base.pm文档告诉你的差异。 – 2009-09-04 16:33:53