In Rust, wenn wir eine Struktur wollen Referenzen enthalten, definieren wir typischerweise ihrem Leben als solche:Wann ist es sinnvoll, mehrere Lebenszeiten in einer Struktur zu definieren?
struct Foo<'a> {
x: &'a i32,
y: &'a i32,
}
Aber es ist auch möglich, mehrere Lebensdauern für verschiedene Referenzen in der gleichen Struktur zu definieren:
struct Foo<'a, 'b> {
x: &'a i32,
y: &'b i32,
}
Wann ist es jemals sinnvoll, dies zu tun? Kann jemand einen Beispielcode bereitstellen, der nicht kompiliert wird, wenn beide Lebensdauern 'a
sind, aber kompiliert, wenn die Lebensdauern 'a
und 'b
sind (oder umgekehrt)?
Hahahaha! Ich schrieb mehr oder weniger genau das gleiche, dann hatte ich vor 15 Stunden einen Stromausfall. Ich war gerade dabei, es zu posten. Ja, über den einzigen Fall, den ich mir vorstellen kann, ist, wenn Sie in der Lage sein wollen, einen Gesamtwert zu nehmen und Teile davon nach der Verwendung abzutrennen, ohne lebenslange Informationen zu verlieren. Denken Sie daran, ein Bündel von Werten aufzubauen (was Lebensdauern beinhalten könnte), indem Sie es verwenden und anschließend die ursprünglichen Werte wiederherstellen. –
Das 'b in get_x_or_zero_ref kann natürlich weggelassen werden, da es durch die Standard-Lebensdauer-Elisionsregeln impliziert wird. – bluss
Es macht keinen Sinn zu sagen, dass eine Funktion "erfordert", dass ihre Parameter unterschiedliche Lebensdauern haben. Der Zweck der Lebensdauerparameter besteht darin, zu verhindern, dass die Funktion oder Struktur diese Parameter in eine einzige (abgeleitete) Lebensdauer vereinheitlicht, so dass der Border-Checker zwischen ihnen unterscheiden kann – trentcl