我想创建一个扩展DBI的单例类.我应该做这样的事情:
use base 'Class::Singleton';
our @ISA = ('DBI');Run Code Online (Sandbox Code Playgroud)
或这个:
our @ISA = ('Class::Singleton', 'DBI');Run Code Online (Sandbox Code Playgroud)
或者是其他东西?
不确定'use base'和'isa'之间的区别是什么.
典型的用途@ISA是
package Foo;
require Bar;
our @ISA = qw/Bar/;
Run Code Online (Sandbox Code Playgroud)
在base和parent编译指示都加载所请求的类和修改@ISA,包括它:
package Foo;
use base qw/Bar/;
Run Code Online (Sandbox Code Playgroud)
如果您想要多重继承,可以提供多个模块base或parent:
package Foo;
use parent qw/Bar Baz/; #@ISA is now ("Bar", "Baz");
Run Code Online (Sandbox Code Playgroud)
该parent编译指示是Perl 5.10.1中的新增功能,但如果您使用的是旧版本的Perl,则可以从CPAN安装.它之所以被创造是因为base由于"积累在其中的残骸",这种实用主义变得难以维持.你不应该看到两者之间的基本用法有所不同.