Perl继承的首选惯例是什么?
发布时间:2020-12-15 21:12:13 所属栏目:大数据 来源:网络整理
导读:在下面的例子中,我有3种不同的语法/机制来定义继承.他们都工作有人可以告诉我哪一个是首选,为什么(是的,我知道“有超过…”).另外,为什么我需要“使用WB”1例而不是其他2. TIA 主要的 – #!/usr/local/bin/perl -w#######################use strict;use Riv
在下面的例子中,我有3种不同的语法/机制来定义继承.他们都工作有人可以告诉我哪一个是首选,为什么(是的,我知道“有超过…”).另外,为什么我需要“使用WB”1例而不是其他2. TIA
主要的 – #!/usr/local/bin/perl -w ####################### use strict; use River; use Ocean; use Lake; my $pName = $0; $pName =~ s/.*///; $pName =~ s/.w+$//; my @sources = (Ocean->new ('Pacific',1),River->new ('Brazos',0),Lake->new ('Tahoe',0) ); foreach (@sources) { $_->printIfSaline ($pName); } 模块(湖,河和海洋继承自WaterBody): ###################### # File: Lake.pm ###################### package Lake; use strict; use WaterBody; our @ISA = ('WaterBody'); sub new { my $class = shift; $class->SUPER::new(@_) } sub printIfSaline { my ($self,$prompt) = @_; my $name = $self->getName(); my $taste = $self->isSaline() ? "salty" : "sweet"; print "$prompt: Lake $name has $taste watern"; } 1 ###################### # File: Ocean.pm ###################### package Ocean; use strict; use parent 'WaterBody'; sub new { my $class = shift; $class->SUPER::new(@_); } sub printIfSaline { my ($self,$prompt) = @_; my $name = $self->getName; my $taste = $self->SUPER::isSaline() ? "salty" : "sweet"; print "$prompt: $name Ocean has $taste watern"; } 1 ###################### # File: River.pm ###################### package River; use strict; use base 'WaterBody'; sub new { my $class = shift; $class->SUPER::new(@_); } sub printIfSaline { my ($self,$prompt) = @_; my $name = $self->getName; my $taste = $self->isSaline ? "salty" : "sweet"; print "$prompt: $name river has $taste watern"; } 1 ###################### # File: WaterBody.pm ###################### package WaterBody; sub new { my $class = shift; my $self = {}; $self->{name} = shift; $self->{saline} = shift; bless $self,$class; return $self; } sub getName { my ($self) = @_; $self->{name} } sub isSaline { my ($self) = @_; $self->{saline} } 1 解决方法
使用父编译指示在编译时设置@ISA.从
parent
当你使用ParentClass;然后手动设置运行时发生的@ISA.在这种情况下,BEGIN,CHECK或INIT块中的代码将无法使用继承层次结构,无需额外的工作. 使用基本的pragma是较旧的,父级是在docs中推荐的.从base
因此,我会用父母说. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读