次のメソッドを持つクラスを持っているとしましょう (これは少しばかげていますが、実際にはデフォルトのディレクトリと関係があります):
sub getOne { my $self = shift; return $self->getZero() + 1; }
sub getZero { my $self = shift; return $self->getOne() - 1; }
ユーザーがこれらのメソッドのいずれかまたは両方をオーバーライドできるようにしたい、またはまったくオーバーライドできないようにしたいと考えています。メソッドの 1 つをオーバーライドする場合、もちろん他のメソッドはデフォルトを使用するため、 を に設定getOne
する7
と. ユーザーは両方をオーバーライドすることもできます。しかし、ユーザーは何も上書きすることもできません。その場合、結果は明らかなand になります。これは上記のコードが失敗した場合で、この場合は無限ループに入ります。getZero
6
1
0
私は私が持つことができることを知っています:
sub getOneOverride { undef; }
sub getZeroOverride { undef; }
sub getOne
{
my $self = shift;
return $self->getOneOverride() or
($self->getZeroOverride() ? $self->getZeroOverride() + 1 : 1);
}
sub getZero
{
my $self = shift;
return $self->getZeroOverride() or
($self->getOneOverride() ? $self->getOneOverride() - 1 : 0);
}
しかし、これには個別のオーバーライド メソッドと読み取りメソッドが必要になるため、少し面倒です。
個別の「オーバーライド」メソッドなしで上記を達成する方法はありますか?