我有一个基类,它用一个复杂的数据结构实例化,该结构具有三位数的条目,所有这些都是常量。其中一些常量是特定于类的,应该用不同的常量实例化。我很难做到这一点。归结为:
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 不应有任何基本常量值。现在我用魔术字符串实例化这个类并进行搜索和替换。它有效,但似乎不那么优雅和高性能。
任何帮助是极大的赞赏。我之前曾问过这个问题(Perl:使用通用构造函数进行基类和子类),但过度简化了示例,因此响应只能暗示可能的解决方案。
谢谢,马库斯