【发布时间】:2019-05-10 11:29:05
【问题描述】:
The Rust Programming Language says:
如果你想强制闭包获取它在环境中使用的值的所有权,你可以在参数列表前使用
move关键字
我注意到我的代码不会拥有这些值的所有权。我的代码和给定示例之间的区别是:
- 使用整数而不是
Vec - 使
x可变而不是不可变
示例 1: Rust 编程语言
fn main() {
let x = vec![1, 2, 3];
let equal_to_x = move |z| z == x;
println!("can't use x here: {:?}", x);
let y = vec![1, 2, 3];
assert!(equal_to_x(y));
}
示例 2:我的代码
fn main() {
let mut x = 1;
let equal_to_x = move |z| z == x;
println!("can use x here: {:?}", x);
let y = 1;
assert!(equal_to_x(y));
}
为什么示例 2 会编译而示例 1 不会?
A为什么
x的所有权没有移动,即使我在闭包前明确写了move?为什么x移入闭包后可以访问?
【问题讨论】:
-
因为在您的示例 2 中,
x是可复制的,而在第一个中则不可复制。