为什么转移所有权后可以使用非捕获闭包?
Why can a non-capturing closure be used after transferring ownership?
我试图了解 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
}
另请参阅:
- Why does "move" in Rust not actually move?
- Can you clone a closure?
我试图了解 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
}
另请参阅:
- Why does "move" in Rust not actually move?
- Can you clone a closure?