Veränderbare Anleihen von Selbst ändern sich nicht in unveränderlich

8

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?

    
Timmmm 16.12.2016, 18:26
quelle

1 Antwort

1

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.

    
Chris Emerson 17.12.2016 01:04
quelle

Tags und Links