我正在尝试编写代码,以获取一些向量的最后一个元素,并根据该元素执行不同的操作(包括对向量的变异)。
我尝试了以下代码:
我尝试了以下代码:
#[derive(Clone, PartialEq)]
enum ParseItem {
Start,
End,
}
let mut item_vec = vec![ParseItem::End];
loop {
let last_item = *item_vec.last().clone().unwrap();
match last_item {
ParseItem::End => item_vec.push(ParseItem::Start),
_ => break,
}
}
我遇到了以下错误:
错误:无法移动借用的内容
let last_item = *item_vec.last().clone().unwrap();
我原以为通过克隆item_vec.last()
,可以解决所有权问题,但似乎并不是这样。
如果我尝试对一个整数向量做同样的操作,如下所示:
let mut int_vec = vec![0];
loop {
let last_int = *int_vec.last().clone().unwrap();
match last_int {
0 => int_vec.push(1),
_ => break,
}
}
编译器没有抱怨借用。
为什么我的代码无法编译?
*
",请再试一次看看现在是否可以工作。整数版本可行是因为整数是Copy
类型,这意味着赋值let new = *ref
会导致复制而不是移动。我在其他地方更详细地讨论了移动和复制的区别。 - Veedrac