在 Rust 1.26 中,一个名为 impl Trait 的新功能被稳定下来,这使得函数能够返回一个未装箱的闭包。但是如何为未装箱的闭包定义结构字段的类型,下面的代码无法编译:
fn return_closure() -> impl Fn() -> () {
move || {
println!("abc");
}
}
struct HoldClosure {
closure: impl Fn() -> ()
}
fn main() {
let hold_my_closure = HoldClosure {
closure: return_closure()
};
}
只需使用泛型类型参数。
fn return_closure() -> impl Fn() {
move || {
println!("abc");
}
}
struct HoldClosure<F: Fn()> {
closure: F,
}
fn main() {
let hold_my_closure = HoldClosure {
closure: return_closure()
};
(hold_my_closure.closure)();
}