私は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'の違いはわかりません。
perldoc base
で提案されているように、base
の代わりにparent
プラグマを使用する必要があります。あなたは多重継承をしたい場合は
package Foo;
use base qw/Bar/;
、あなたが供給することができます:
5.10では 'parent'が新しくなっていますか?それは私の5.8の文書にはないので、そうでなければなりません。 – Ether
わかりません。しかし、Chasの声明を引用しています: "...親のプラグマはPerl 5.10.1から新しくなっていますが、古いバージョンのPerlをお持ちの場合はCPANからインストール可能です..." –
@ISA
の典型的な使用は、要求されたクラスをロードし、それを含めるように@ISA
を変更し、両方の
package Foo;
require Bar;
our @ISA = qw/Bar/;
base
とparent
プラグマです複数のモジュールをbase
またはparent
に:
package Foo;
use parent qw/Bar Baz/; #@ISA is now ("Bar", "Baz");
parent
プラグマは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にある親を使用してください。 :) –
親クラスを継承する場合は、ロードして@ISAを変更する必要があります。この2つのステップは、ベースを使用するときに処理されます。ベースはあなたのためにモジュールをロードし、それに応じて@ISAを変更します。それ以外の場合は、@ISAを変更して親モジュールを独自にロードする必要があります。次の
はどちらも同じです。
use base "Parent";
と
require Parent;
@ISA = ("Parent");
まあ、base.pmのドキュメントはあなたに違いを伝えます。 –