У меня есть следующее:
struct User {
username: String,
}
fn test(user: User) -> Result<(), Error> {
Ok(())
}
fn query(user: &User) -> Result<(), Error> {
test(*user)
}
fn main() {
let user = User {username: "test".to_string()};
query(&user);
println!("user: {:?}", user.username);
}
Извинения за, возможно, базовый c вопрос:
В идеале, я бы хотел, чтобы query
занял user
, и вернуть право собственности на main
. User
намеренно не реализует черту Copy
. Я не могу move
владение, потому что хотел бы, чтобы user
продолжал использоваться позже в main
. Я не могу изменить сигнатуру типа test
.
Когда я запускаю этот код, я вижу следующее сообщение об ошибке:
error[E0507]: cannot move out of `*user` which is behind a shared reference
--> experimental/main.rs:32:10
|
32 | test(*user)
| ^^^^^ move occurs because `*user` has type `User`, which does not implement the `Copy` trait
Я, очевидно, не могу вызвать query(user)
(без заимствование), которое представляет собой переход права собственности в query
.
Возможно ли для query
заимствовать user
таким образом, что я могу назвать test
и все же позволить main
иметь собственности?