Perl   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Perl继承的首选惯例是什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在下面的例子中,我有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 water\n";
}

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 water\n";
}

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 water\n";
}

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

因此,我会用父母说.

大佬总结

以上是大佬教程为你收集整理的Perl继承的首选惯例是什么?全部内容,希望文章能够帮你解决Perl继承的首选惯例是什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。