我希望能够写一个小的封装来包装
具体地,我有这段代码(playground):
VecDeque
。具体地,我有这段代码(playground):
use std::collections::VecDeque;
trait VecCircleTraits<T: Eq> {
fn new() -> VecCircle<T>;
fn find_and_remove(&self, _: T) -> Option<T>;
}
#[derive(Debug)]
struct VecCircle<T: Eq>(VecDeque<T>);
impl<T: Eq> VecCircleTraits<T> for VecCircle<T> {
fn new() -> VecCircle<T> {
return VecCircle(VecDeque::<T>::new());
}
fn find_and_remove(&self, key: T) -> Option<T> {
let search_index: Option<usize> = self.0.into_iter().position(|x| x == key); //error 1
if let Some(index) = search_index {
return self.0.remove(index); // error 2
} else {
return None;
}
}
}
这会给我以下错误:
error: cannot borrow immutable anonymous field `self.0` as mutable
--> <anon>:20:20
|>
20 |> return self.0.remove(index); // error 2
|> ^^^^^^
error: cannot move out of borrowed content [--explain E0507]
--> <anon>:18:44
|>
18 |> let search_index: Option<usize> = self.0.into_iter().position(|x| x == key); //error 1
|> ^^^^ cannot move out of borrowed content
然而,我有点困惑,谁拥有self.0
的所有权?如果我正确理解文档,那么内存区域不是被限制在self.0
上,并因此归它所有吗?对于我的肤浅逻辑感到抱歉,但我仍在努力理解所有权系统。