Ich bin zu Rust neu und versuchend, meinen Kopf um das Besitz-/Entleihenkonzept einzuwickeln. Jetzt habe ich meinen Code auf dieses minimale Codebeispiel reduziert, das einen Kompilierungsfehler ergibt.Erhalte ein enum Feld von einer Struktur: kann nicht aus geliehenem Inhalt heraus bewegen
pub struct Display {
color: Color,
}
pub enum Color {
Blue = 0x1,
Red = 0x4,
}
impl Display {
fn get_color_value(&self) -> u16 {
self.color as u16
}
}
src/display.rs:12:9: 12:13 error: cannot move out of borrowed content src/display.rs:12 self.color as u16 ^~~~ error: aborting due to previous error Could not compile.
ich noch im bin alles wird von Wert Einstellung kopiert, wo es vollkommen legal ist self.color
zu tun, als dass mir eine Kopie Color
bekommen 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, ist das Feld im Besitz von wem die Display
besitzt. Da ich nur eine Referenz auf die Display
ausgeliehen habe, besitze ich sie nicht. Extrahieren color
versucht, das Eigentum von die Color
zu mir zu übertragen, was nicht möglich ist, da ich dienicht besitze. Ist das richtig?
Wie löse ich es?
sollten wir '# verwenden [ableiten (Kopieren, Clone)]' 'da Copy' hat' Clone' als supertrait (wie in [dieser Antwort] erklärt (http ://Paketüberfluss.com/questions/30782836/the-trait-clone-is-is-not-implementiert-wenn-abgeleitet-the-trait-copy-for-enum)) –
@TaThanhDinh Danke, behoben. Nicht sicher, ob das der Fall war, als ich diese Frage beantwortete. – Arjan