Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在不实现子构造函数的情况下生成Perl子类吗?_Perl - Fatal编程技术网

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

我可以在不实现子构造函数的情况下生成Perl子类吗?,perl,Perl,在Perl中,不实现构造函数就可以生成子类吗?我不需要任何特定于子类的构造函数行为,所以我希望从父类继承 在本例中,我有一个基类base.pm和一个子类child.pm。子类类应该简单地重写其父类的一个方法: # test.pl use strict; use warnings; use Child; my $o = Child->new(); $o->exec(); - - 当我运行test.pl时,基类的exec方法被执行(我假设这是因为对象在Base.pm构造函数中被称为B

在Perl中,不实现构造函数就可以生成子类吗?我不需要任何特定于子类的构造函数行为,所以我希望从父类继承

在本例中,我有一个基类
base.pm
和一个子类
child.pm
子类
类应该简单地重写其父类的一个方法:

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

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

-

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

有没有一种方法可以实现一个子类而不必重新实现构造函数

是的

您实际上具备以下条件:

sub new {
   return bless({});
}
sub new {
   my $class = shift;
   return bless({}, $class);
}
将其替换为以下内容:

sub new {
   return bless({});
}
sub new {
   my $class = shift;
   return bless({}, $class);
}
基本上,总是使用的双参数形式


如何编写构造函数:

  • 基类:

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

    sub new {
       my ($class, ...) = @_;
       my $self = $class->SUPER::new(...);
       $self->{...} = ...;
       return $self;
    }
    
我喜欢对称。

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