在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()
};
}
答案 0 :(得分:1)
只需使用泛型类型参数即可。
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)();
}