Sono nuovo di Rust e sto cercando di riprendere il concetto di proprietà/prestito. Ora ho ridotto il mio codice a questo esempio di codice minimo che fornisce un errore di compilazione.Ottieni un campo enum da una struttura: non posso spostarmi dal contenuto preso in prestito
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.
Sono ancora in tutto viene copiato per valore mentalità, dove è perfettamente legale per fare self.color
come che mi sarebbe ottenere una copia di Color
. Apparentemente, ho torto. Ho trovato altre domande su questo stesso errore su SO, ma nessuna soluzione al mio problema.
A quanto ho capito, il campo è di proprietà di chiunque possieda lo Display
. Poiché ho preso in prestito solo un riferimento allo Display
, non lo possiedo. Estrarre color
tentativi di trasferire la proprietà di il Color
a me, che non è possibile poiché non possiedo il Display
. È corretto?
Come si risolve?
dovremmo usare '# [derivare (Copy, Clone)]' 'dal Copy' ha' Clone' come il supertrait (come spiegato in [questa risposta] (http : // StackOverflow.it/questions/30782836/the-trait-clone-è-non-implementato-quando-deriva-the-trait-copy-for-enum)) –
@TaThanhDinh Grazie, risolto. Non sono sicuro che sia stato così quando ho risposto a questa domanda. – Arjan