Von Warum kann ich keinen Wert und eine Referenz auf diesen Wert in derselben Struktur speichern? Ich habe gelernt, dass ich keinen Wert und eine Referenz in derselben Struktur speichern kann.
Die vorgeschlagene Lösung ist:
Die einfachste und am besten empfohlene Lösung besteht darin, nicht zu versuchen, diese Elemente in die gleiche Struktur zu bringen. Dadurch wird die Strukturverschachtelung die Lebensdauer Ihres Codes nachahmen. Platzieren Sie Typen, die Daten besitzen, zusammen in einer Struktur und stellen Sie dann Methoden bereit, mit denen Sie Referenzen oder Objekte erhalten können, die Referenzen enthalten.
Allerdings kann ich das in meinem konkreten Fall nicht anwenden:
Ich möchte eine bidirektionale Karte erstellen, die von zwei internen HashMap
s implementiert wird.
Offensichtlich muss einer von ihnen die Daten besitzen. Der andere Teil ist aber auch wichtig für die bidirektionale Karte, also sehe ich nicht, wie ich diese beiden trennen könnte, während ich immer noch eine bidirektionale Kartenschnittstelle beibehalte.
In diesem Fall verhält sich die einfachste Lösung wie eine Sprache, in der ein Garbage Collector funktionieren würde:
%Vor%Natürlich möchten Sie einen viel strengeren Code haben, da Sie damit das bidirektionale Mapping brechen können. Dies zeigt Ihnen nur eine Möglichkeit, das Problem zu lösen.
Offensichtlich muss einer von ihnen die Daten besitzen
Das ist natürlich nicht wahr ^ _ ^. In diesem Fall teilen beide Karten die Eigentümerschaft mit Rc
.
Benchmark diese Lösung zu wissen, ob es effizient genug ist.
Um etwas effizienter zu machen, müsste viel mehr über das Eigentum nachgedacht werden. Wenn beispielsweise die Zuordnung left_to_right
den Daten gehört und Sie einen Rohzeiger in der anderen Zuordnung verwendet haben, wird dieser Zeiger ungültig, sobald die erste Zuordnung neu zugewiesen wurde.
Tags und Links rust lifetime borrow-checker