这个问题在这里已经有了答案:
Cannot move out of borrowed content / cannot move out of behind a shared reference
(1 个回答)
12 个月前关闭。
我正在学习 Rust,我有一个关于如何将变量的引用传递给函数并使用它进行级联调用的问题。
我正面临以下代码中指出的错误:
struct User {
name: String,
address: String
}
// Argument "user" is intentionaly a reference to User struct;
//
fn func1(user: &User) {
println!("func1: {}, {}", user.name, user.address);
// error[E0507]: cannot move out of `*user` which is behind a shared reference
//
func2(*user);
}
// Argument "user" is intentionaly an instance of User struct;
//
fn func2(user: User) {
println!("func2: {}, {}", user.name, user.address);
}
fn main() {
let user = User {
name: String::from("George"),
address: String::from("Main Street")
};
func1(&user);
}
为什么我不能这样做?我该怎么办?
我认为克隆 User 对象不是一种选择。想象一下,如果不是这个简单的结构,我们有一个可以占用几个 MBytes 的 super 结构?
最佳答案
fn func1(user: &User)
是一个借用现有 User 对象的函数,并 promise 不修改它。 fn func2(user: User)
是一个函数,它获得一个对象的所有权并且永远不会把它归还。
Rust 阻止你做一些愚蠢的事情。有 func1
调用 func2
就像向我保证你会借我的类笔记快速阅读,然后将其传递给一个 friend ,然后他会跑掉并保留它们。你不可能把我的原件还给我。
解决方案是
func2
也引用一下。这相当于让你的 friend 答应把笔记还给你。然后你可以把它们还给我。 func2
之前克隆对象.这相当于你复制了笔记,让你的 friend 拿着你的副本跑了——然后把我的原件还给我。 关于rust - 无法移出共享引用后面的 ***,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61995143/