Ruft ein enum-Feld von einer Struktur ab: kann nicht aus ausgeliehenem Inhalt herauskommen

8

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?

    
Virtlink 03.03.2015, 23:20
quelle

1 Antwort

10
  

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:

  • Leiten Sie das Merkmal Copy für den Typ (falls zutreffend)
  • ab
  • Verwenden / ableiten Clone ( self.color.clone() )
  • Eine Referenz zurückgeben

Um das zu lösen, leiten Sie Copy für Color :

ab %Vor%

Dies ist das Gleiche wie:

%Vor%     
Arjan 03.03.2015, 23:22
quelle

Tags und Links