मैं जंगली जीवनकाल, स्वामित्व और संदर्भों के आस-पास अपने सिर को लपेटने के लिए एक लिंक्ड सूची लिख रहा हूं। मैं निम्नलिखित कोड है:स्वामित्व स्थानांतरित करने का प्रयास करते समय उधारित सामग्री से बाहर नहीं जा सकता
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() {}
लेकिन मैं निम्नलिखित संकलन त्रुटि हो रही है:
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
मैं सोच रहा हूँ कि head
नोड वर्तमान में self
के स्वामित्व में किया जाना चाहिए, जो लिंक्ड सूची है। जब मैं इसे new_node.next
पर असाइन करता हूं, तो संभवतः स्वामित्व में बदलाव होता है जो होगा।
यदि संभव हो तो मैं मूल्य को क्लोन नहीं करूँगा क्योंकि यह अपमानजनक लगता है। मैं फ़ंक्शन की अवधि के लिए इसे "उधार" नहीं लेना चाहता हूं। मैं वास्तव में अपने स्वामित्व को स्थानांतरित करना चाहता हूं।
मैं यह कैसे कर सकता हूं?
मैंने पहले से ही error: cannot move out of borrowed content on &mut self और Cannot move out of borrowed content देखा है।
मैंने उन प्रश्नों में से एक में स्वीकृत उत्तर में सुझाए गए मैच आर्मी को हटाने और next
को नए LinkedListNode
के निर्माण में परिभाषित करने का प्रयास किया, लेकिन मुझे एक ही त्रुटि संदेश मिलता है।
मैंने सफलतापूर्वक append
विधि को सफलतापूर्वक जोड़ा है जो सूची के अंत में जोड़ने के लिए LinkedListNode
लेता है।
के संभावित डुप्लिकेट [\ '\ की भिन्नता से बाहर नहीं ले जा सकते' और mut \ '-pointer \' एक हल कर लिंक्ड सूची के निर्माण, जबकि] (http : //stackoverflow.com/questions/27750985/cannot-move-out-of-dereference-of-mut-pointer-while-building-a-sorted-linke) – Shepmaster