我定义了一个Attribute
类型,并且我有一个Vec<Attribute>
循环来检索“最佳”的类型。这与我的第一次尝试类似:
#[derive(Debug)]
struct Attribute;
impl Attribute {
fn new() -> Self {
Self
}
}
fn example(attrs: Vec<Attribute>, root: &mut Attribute) {
let mut best_attr = &Attribute::new();
for a in attrs.iter() {
if is_best(a) {
best_attr = a;
}
}
*root = *best_attr;
}
// simplified for example
fn is_best(_: &Attribute) -> bool {
true
}
我有以下编译错误:
error[E0507]: cannot move out of borrowed content
--> src/lib.rs:17:13
|
17 | *root = *best_attr;
| ^^^^^^^^^^ cannot move out of borrowed content
在寻找解决方案后,我通过执行以下操作解决了错误:
- 向我的结构添加
#[derive(Clone)]
属性Attribute
- 将最后的语句替换为
*root = best_attr.clone();
我不完全理解为什么会这样,我觉得这是我遇到的问题的粗略解决方案。这如何解决错误,这是解决此问题的正确方法吗?