Explizite Lebensdauerdeklarationen in Merkmalobjekten von structs

In der Antwort aufdiese Frag Es wird diskutiert, wie auf Merkmalsobjekte in Strukturen verwiesen werden kann, für die die folgende Syntax erforderlich ist:

struct Bar<'a> {
    foo: &'a (Foo + 'a),
}

Dies ist proRFC 438

Könnte ich weitere Erklärungen zur doppelten Lebenszeiterklärung anfordern? Levans sagte:

Sie müssen die Lebensdauer zweimal angeben: einmal für die Lebensdauer der Referenz und einmal für das Merkmalobjekt selbst, da Merkmale für Referenzen implementiert werden können. Wenn das zugrunde liegende Objekt eine Referenz ist, müssen Sie auch die Lebensdauer angeben .

Ich verstehe den Begriff des Lebens als Referenz in der Struktur. Aber ich verstehe nicht, warum das Leben nicht für das Objekt bestimmt ist, für das das Merkmal ein Merkmal ist. Anders ausgedrückt, ich weiß nicht, was es bedeutet, einen Verweis auf ein Merkmal zu halten, ohne einen Verweis auf das zugrunde liegende Element zu halten, für das es ein Merkmal ist.

Gibt es einen Fall, in dem das Merkmal und das zugrunde liegende Objekt unterschiedliche Lebensdauern haben würden? Was würde es bedeuten, an einem Verweis auf ein Merkmal festzuhalten, ohne an dem zugrunde liegenden Merkmal festzuhalten?

Frage noch einen anderen Weg, warum kann Rust nicht einfach das Richtige tun (tm) mit:

struct Bar<'a> {
    foo: &'a Foo,
}

where The Right Thing (tm) würde das als äquivalent zur obigen Erklärung interpretieren?

Tut mir leid, mit Fragen zu bombardieren, aber ich hatte das Gefühl, dass ich etwas ziemlich Grundlegendes mache (benutze ein Merkmal als generische Facette), und ich musste das Kaninchenloch ziemlich tief hinuntergehen, und ich würde gerne verstehen, warum das Kaninchenloch ist das tief.

Die Fehlermeldung:error: explicit lifetime bound required war ausgesprochen wenig hilfreich, da bereits eine lebenslange Bindung besteht.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage