gpt4 book ai didi

rust - 为什么转移所有权后可以使用非捕获闭包?

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

我试图理解 Rust 中的所有权,但遇到了与转让所有权相关的误解。考虑以下代码:

fn main() {
let closure = || 32;
foo(closure);
foo(closure); //perfectly fine
}

fn foo<F>(f: F) -> u32
where
F: Fn() -> u32,
{
f()
}

playground

我认为应该转移所有权并且不允许第二次调用 foo(closure)

为什么有效?

最佳答案

您的闭包实现了Copy,因此当您第二次使用它时,会自动创建一个副本。您的代码的工作原理与此相同:

fn main() {
let v = 32;
foo(v);
foo(v);
}

fn foo(a: u32) -> u32 {
a
}

另见:

关于rust - 为什么转移所有权后可以使用非捕获闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63120155/

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