Dieser Code schlägt den gefürchteten Border-Checker ( Spielplatz ) fehl:
%Vor%Fehler:
%Vor% Kann jemand genau erklären, warum das so ist? Ich hätte gedacht, dass der veränderbare Kredit von dat
in einen unveränderlichen umgewandelt wird, wenn reference_to_a()
zurückgibt, weil diese Funktion nur eine unveränderliche Referenz zurückgibt. Ist der Border Checker noch nicht schlau genug? Ist das geplant? Gibt es einen Weg dahin?
Lebenszeiten sind unabhängig davon, ob eine Referenz veränderbar ist oder nicht. Durch den Code arbeiten:
%Vor%Obwohl die Lebensdauern bereits abgelaufen sind, entspricht dies:
%Vor% d. Die Lebensdauern für Input und Output sind gleich. Das ist die einzige Möglichkeit, Lebenszeiten einer Funktion wie dieser zuzuweisen (es sei denn, es wurde eine &'static
-Referenz auf globale Daten zurückgegeben), da Sie die Lebensdauer der Ausgabe nicht aus nichts zusammensetzen können.
Das heißt, wenn Sie den Rückgabewert durch Speichern in einer Variablen am Leben erhalten, behalten Sie auch &mut self
am Leben.
Eine andere Möglichkeit, darüber nachzudenken, ist, dass &i32
ein Unterborgen von &mut self
ist, also nur bis zum Ablauf gültig ist.
Wie @aSpex hervorhebt, ist dies im Nomicon enthalten.
Tags und Links rust borrow-checker