我可以在不实现子构造函数的情况下创建Perl子类吗?

前端之家收集整理的这篇文章主要介绍了我可以在不实现子构造函数的情况下创建Perl子类吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在Perl中是否可以在不实现构造函数的情况下创建子类?我不需要任何特定于子类的构造函数行为,所以我想从父类继承.

在这个例子中,我有一个基类Base.pm和一个子类Child.pm. Child类应该简单地覆盖其父类的一个方法

# test.pl
use strict;
use warnings;
use Child;

my $o = Child->new();
$o->exec();

# Base.pm
package Base;

sub new{
    my $self = {};

    bless $self;
    return $self;
}

sub exec{
    my $self = shift;
    die "I'm in the Base class\n";
}

1;

# Child.pm
package Child;

use Base;
@ISA = ('Base');

sub exec{
    my $self = shift;

    die "OVERRIDE in child\n";
}

1;

当我运行test.pl时,Base类的exec方法被执行(我假设它是因为该对象在Base.pm构造函数中被祝福为Base).

$./test.pl 
I'm the Base class

有没有办法实现子类而不必重新实现构造函数

解决方法

是.

您有效地拥有以下内容

sub new {
   return bless({});
}

将其替换为以下内容

sub new {
   my $class = shift;
   return bless({},$class);
}

基本上,总是使用bless的双参数形式.

我是如何编写构造函数的:

>基类:

sub new {
   my ($class,...) = @_;
   my $self = bless({},$class);
   $self->{...} = ...;
   return $self;
}

>派生类:

sub new {
   my ($class,...) = @_;
   my $self = $class->SUPER::new(...);
   $self->{...} = ...;
   return $self;
}

我喜欢对称性.

猜你在找的Perl相关文章