rust - 如何使结构接受类型 `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)();
}
推荐阅读
- ruby - 如何在创建 Google 活动后收到的电子邮件通知中删除 Google Meet?
- php - 字符串数组计数并合并为一
- html - CSS - 如何根据内容调整 div 的高度?
- jenkins - 通过反向代理(Netscaler)访问时无法在 Jenkins 中添加凭据
- git - 从批处理文件运行 git 命令时“从 commit-graph.lock 重命名为 commit-graph failed”
- c++ - 模板类的继承
- angular - Angular中JSON.parse错误位置0处JSON中的意外令牌P
- asp.net - Gsuite SAML 与 ASP.net 应用程序的集成
- javascript - 通过 JS 在 HTML 中打印当前年份时间戳
- java - java中与Postgresql的连接太多