new
派生クラスにメソッドを実装する2つの方法を見てきました。
方法1:
sub new {
my $invocant = shift;
my $class = ref($invocant) || $invocant;
my $self = {};
bless($self, $class);
$self = $self->SUPER::new( @_ );
return($self);
}
方法2:
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
がnew
呼び出され、同じオブジェクトに保存されます。
一方、2番目の例では、ベースオブジェクトがクラスのメソッドから作成され、SUPER
それnew
が新しいクラスに祝福されます。
これら2つの方法の違いは何ですか?最初のオブジェクトがベースオブジェクトで上書きされているようです。2番目は「二重の祝福」のようです。よくわかりません。