【发布时间】:2020-09-11 15:53:57
【问题描述】:
我正在学习 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 的超结构?
【问题讨论】:
-
因为您无法移动不属于您的值。 “我该怎么办?”不是这样,为什么不通过参考或两者都按价值?或者第一个按值,第二个按引用。
标签: rust