[英]Rust custom link list pop_back implementation
我是 rust 的新手,並嘗試了解 &mut ref 變量和可變性。 我開始使用 pop_back function 創建一個簡單的鏈接列表。
pub fn pop_back(&mut self) -> Option<T> {
let mut head = &mut self.head;
while let Some(v) = head {
if v.next.is_none() {
break;
}
head = &mut v.next;
}
head.take().map(|node| node.data)
}
但不能讓它工作。 錯誤是cannot borrow *head as mutable more than once at a time
。 如何告訴 rust 我只想更改循環中的引用而不是值? 我不想在我的列表中添加另一個尾變量,所以在不改變結構的情況下我怎樣才能使它工作?
這是結構定義
pub struct Node<T> {
data: T,
next: Option<Box<Node<T>>>
}
pub struct SimpleLinkedList<T> {
head: Option<Box<Node<T>>>,
}
這是借用檢查器的已知限制。 下一代Polonius將解決這個問題。
同時,解決方案(沒有unsafe
)是重復計算。 在您的情況下,這意味着一些unwrap()
s:
pub fn pop_back(&mut self) -> Option<T> {
let mut head = &mut self.head;
while head.is_some() {
if head.as_mut().unwrap().next.is_none() {
break;
}
head = &mut head.as_mut().unwrap().next;
}
head.take().map(|node| node.data)
}
也可以看看:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.