我已经看到了两种new
在派生类中实现该方法的方法。
方法一:
sub new {
my $invocant = shift;
my $class = ref($invocant) || $invocant;
my $self = {};
bless($self, $class);
$self = $self->SUPER::new( @_ );
return($self);
}
方法二:
sub new {
my $self = shift;
my $class = ref($self) || $self;
return $self if ref $self;
my $base_object = $class->SUPER::new(@_);
return bless ($base_object, $class);
}
我不确定我理解有什么区别。谁能解释一下?
从您的评论和回答中,我可以看出这ref()
部分很糟糕。
但是使用SUPER::new(@_)
呢?在第一个示例中,hashref 被祝福到派生类中,然后调用该对象的SUPER
'snew
并将其保存到同一个对象中。
另一方面,在第二个示例中,基对象是从类的SUPER
snew
方法创建的,并被祝福到新类中。
这两种方式有什么区别?看起来第一个用基础对象覆盖了对象。第二个似乎是“双重祝福”。我很困惑。