2
Im folgende Codefragment (Perl mit Moosen) Es scheint eine unendliche Rekursion zu sein:Wie verhindert man unendliche Rekursion (mit Moose)?
has 'ORM' => (is => 'ro',
isa => 'Model::LazySQLModel',
lazy => 1,
builder => 'ORM_builder');
has 'id' => (is => 'ro',
isa => 'Int',
lazy => 1,
builder => 'id_builder',
predicate => 'has_id',
);
sub id_builder { $_[0]->ORM->id }
sub ORM_builder {
my ($self) = @_;
# FIXME: looks like infinite recursion
if ($self->id) {
return $self->ORM_find();
} else {
return $self->ORM_insert();
}
}
Bemerkung: Model::LazySQLModel
ist ein Hash-gebunden, die ID und andere Felder DB hält.
Was ist der richtige Weg (um sicher zu sein, dass wir eine unendliche Rekursion verhindern)?
Es scheint, dass das Ersetzen von 'if ($ self> id)' durch 'if ($ self> has_id)' eine Lösung ist – porton
Yep. Fühlen Sie sich frei, Ihre eigene Frage zu beantworten. Prädikate führen nicht dazu, dass Builder ausgeführt werden. – AKHolland