如何使结构接受类型"impl std::ops::Fn<()>"作为其字段?



在 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)();
}

相关内容

最新更新