Rust中的“cannot move out of borrowed content”错误:如何修复?
大家好!我开始学习Rust,遇到了一个无法理解的错误。我有一个`User`结构体和一个应该修改其`name`字段的函数。代码如下:
```rust
struct User {
name: String,
age: u32,
}
fn update_name(user: &User, new_name: String) {
user.name = new_name; // 这里出错
}
fn main() {
let user = User {
name: String::from("Alice"),
age: 30,
};
update_name(&user, String::from("Bob"));
println!("{}", user.name);
}
```
编译器报错:`cannot move out of borrowed content` 和 `cannot move out of behind a shared reference`。我明白我传递的是`&User`——这是一个不可变引用,但我想修改`name`字段。如果我将签名改为`&mut User`,错误就变成`cannot borrow immutable local variable 'user' as mutable`。我尝试在`main`中的`user`前添加`mut`,但编译器说不能将其作为可变借用,因为它已经被不可变借用了。