我试图理解 Rust 中的所有权,但遇到了与转让所有权相关的误解。考虑以下代码:
fn main() {
let closure = || 32;
foo(closure);
foo(closure); //perfectly fine
}
fn foo<F>(f: F) -> u32
where
F: Fn() -> u32,
{
f()
}
我认为应该转移所有权并且不允许第二次调用 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/