Sto scrivendo un elenco collegato per descrivere la durata, la proprietà e i riferimenti di Rust. Ho il seguente codice:Impossibile spostare il contenuto preso in prestito durante il tentativo di trasferire la proprietà
pub struct LinkedList {
head: Option<Box<LinkedListNode>>,
}
pub struct LinkedListNode {
next: Option<Box<LinkedListNode>>,
}
impl LinkedList {
pub fn new() -> LinkedList {
LinkedList { head: None }
}
pub fn prepend_value(&mut self) {
let mut new_node = LinkedListNode { next: None };
match self.head {
Some(ref head) => new_node.next = Some(*head),
None => new_node.next = None,
};
self.head = Some(Box::new(new_node));
}
}
fn main() {}
Ma sto ottenendo il seguente errore di compilazione:
error[E0507]: cannot move out of borrowed content
--> src/main.rs:18:52
|
18 | Some(ref head) => new_node.next = Some(*head),
| ^^^^^ cannot move out of borrowed content
Sto pensando che il nodo head
deve attualmente essere di proprietà di self
, che è la lista collegata. Quando lo assegno a new_node.next
, probabilmente si verificherà un cambio di proprietà.
Preferirei non clonare il valore se possibile in quanto ciò sembra uno spreco. Non voglio solo "prenderlo in prestito" per la durata della funzione. Voglio davvero trasferirne la proprietà.
Come faccio?
Ho già visto error: cannot move out of borrowed content on &mut self e Cannot move out of borrowed content.
Ho provato a rimuovere il braccio di corrispondenza come suggerito nella risposta accettata in una di quelle domande e definendo next
nella creazione del nuovo LinkedListNode
, ma ottengo lo stesso messaggio di errore.
Ho aggiunto con successo un metodo append
che prende uno LinkedListNode
da aggiungere alla fine dell'elenco.
possibile duplicato di [\ 'non può uscire di dereference di \' & mut \ '-pointer \' mentre la costruzione di una lista collegata ordinato] (http : //stackoverflow.com/questions/27750985/cannot-move-out-of-dereference-of-mut-pointer-while-building-a-sortedference-linke) – Shepmaster