У меня есть простая структура и два ее экземпляра, как показано ниже:
#[derive(Debug)]
struct User {
first: String,
last: String,
age: u32,
}
let u1 = User {
first: String::from("John"),
last: String::from("Doe"),
age: 22,
};
let u2 = User {
first: String::from("Mary"),
..u1
};
println!("user: {:#?}", u1);
Сообщение об ошибке:
error[E0382]: borrow of moved value: `u1`
--> src/main.rs:20:29
|
15 | let u2 = User {
| ______________-
16 | | first: String::from("Mary"),
17 | | ..u1
18 | | };
| |_____- value moved here
19 |
20 | println!("user: {:#?}", u1);
| ^^ value borrowed here after partial move
|
= note: move occurs because `u1.last` has type `std::string::String`, which does not implement the `Copy` trait
Я попытался изменить его на ..&u1
в надеждепередаст проверку заимствования, чтобы я мог распространяться в базовой структуре (u1) на u2, но безрезультатно, интересно, возможно ли вообще то, что я хотел сделать здесь?
Я понимаю, это потому, что u1.last
это String
, следовательно, необходимо передать ссылку, но я не уверен, как заставить это работать в этом сценарии.