Ich bin neu in Rust und versuche, meinen Kopf über das Konzept von Eigentum / Kreditaufnahme zu legen. Jetzt habe ich meinen Code auf dieses minimale Codebeispiel reduziert, das einen Kompilierungsfehler ergibt.
%Vor%%Vor%
Ich bin immer noch in alles kopiert nach Wert Denkweise, wo es absolut legal ist, self.color
zu tun, da das mir eine Kopie von Color
bringen würde. Anscheinend liege ich falsch. Ich habe einige weitere Fragen zu diesem Fehler in SO gefunden, aber keine Lösung für mein Problem.
Wie ich es verstehe, gehört das Feld dem Besitzer von Display
. Da habe ich mir nur ein ausgeliehen
Verweis auf die Display
, ich besitze es nicht. Das Extrahieren von color
versucht, den Besitz von zu übertragen
die Color
für mich, was nicht möglich ist, da ich die Display
nicht besitze. Ist das korrekt?
Wie löse ich es?
Ich bin immer noch in der alles nach Wertschätzung gedachten, wo es ist vollkommen legal, um self.color zu machen, das würde mir eine Kopie von Color bringen. Anscheinend liege ich falsch. Ich habe ein paar andere Fragen dazu gefunden Fehler bei SO, aber keine Lösung für mein Problem.
Alles, was in Rost kopiert werden kann, muss explizit mit einem Merkmal Copy
versehen sein. Copy
war in der Vergangenheit implizit, aber das wurde geändert ( rfc ).
Wie ich es verstehe, gehört das Feld demjenigen, dem das Display gehört. Da ich nur einen Verweis auf das Display entlehnt habe, besitze ich es nicht. Das Extrahieren von Farben versucht, das Eigentum an der Farbe auf mich zu übertragen, was nicht möglich ist, da ich das Display nicht besitze. Ist das korrekt?
Ja. Wenn dieser Fehler auftritt, gibt es drei mögliche Lösungen:
Copy
für den Typ (falls zutreffend) Clone
( self.color.clone()
) Um das zu lösen, leiten Sie Copy
für Color
:
Dies ist das Gleiche wie:
%Vor%Tags und Links rust borrow-checker