3 桁のエントリ数を持つ複雑なデータ構造でインスタンス化された基本クラスがあり、それらはすべて定数です。これらの定数のいくつかはクラス固有であり、別の定数でインスタンス化する必要があります。これを達成するのに苦労しています。要約すると、次のようになります。
tstbase.pm:
package tstbase;
my $THISCLASSCONSTANT = "baseconstant.2";
my %complexdatastructure = (
"attribute.1" => "baseconstant.1",
"attribute.2" => $THISCLASSCONSTANT,
);
sub new {
my $class = shift;
my $self = { };
bless ($self, $class);
$self->_init( $THISCLASSCONSTANT );
return $self;
};
sub _init {
my $self = shift;
$THISCLASSCONSTANT = shift;
foreach (keys %complexdatastructure) {
$self->{$_} = $complexdatastructure{$_};
};
};
tstsubclass.pm:
package tstsubclass;
use parent "tstbase";
my $THISCLASSCONSTANT = "subclassconstant.2";
sub _init {
my $self = shift;
$self->SUPER::_init( $THISCLASSCONSTANT );
};
tst.pl:
#!/usr/bin/perl
use tstbase;
use tstsubclass;
my $baseobj = tstbase->new;
print "Testbase ".$baseobj->{"attribute.1"}." ".$baseobj->{"attribute.2"}."\n";
my $subobj = tstsubclass->new;
print "Testsubclass ".$subobj->{"attribute.1"}." ".$subobj->{"attribute.2"}."\n";
今のところ出力は
Testbase baseconstant.1 baseconstant.2
Testsubclass baseconstant.1 baseconstant.2
私はそれが欲しいのに対し
Testbase baseconstant.1 baseconstant.2
Testsubclass baseconstant.1 subclassconstant.2
それは可能ですか?喜んで使っています
sub THISCLASSCONSTANT = { "subclassconstant.2" }
それが役立つ場合。tstsubclass には baseconstant 値がありません。現在、クラスを魔法の文字列でインスタンス化し、検索と置換を行っています。機能しますが、エレガントさとパフォーマンスが低下しているようです。
どんな助けでも大歓迎です。私は以前にこの質問をしたことがあります ( Perl: Using common constructor for base and subclass ) が、例を単純化しすぎたため、回答は可能な解決策を示唆するものにすぎません。
ありがとう、マーカス