gpt4 book ai didi

rust - 为什么 Rust Closure 在被调用之前就拥有所有权

转载 作者:行者123 更新时间:2023-12-03 11:25:59 26 4
gpt4 key购买 nike

我正在阅读 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));
}

即,为什么 equal_to_x取得所有权 x在它被调用之前?编译器不应该知道闭包还没有被调用(因为它归 main 所有),因此 x 仍然可以归 main 的外部作用域所有。 ?

最佳答案

因为闭包本质上是一个带有与之关联的函数的结构体。我发现更容易想到这样的闭包:

struct MyClosure{
x: Vec<i32>
};

impl MyClosure {
pub fn execute(self, z: Vec<i32>) -> bool {
z == self.x
}
}

如果这样想,你的代码就相当于
let equal_to_x  = MyClosure {
x
};

所以你可以看到为什么移动会发生。

关于rust - 为什么 Rust Closure 在被调用之前就拥有所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62125100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com