types - 在 Rust 中定义异步函数类型
问题描述
如果我想定义一个代表函数的类型,我可以这样写:
type FS = fn(i32) -> i32;
我如何定义异步函数?
type FA = async fn(i32) -> i32; // invalid syntax
type FA = fn(i32) -> impl Future<i32>; // unstable and not allowed
type FA<R> = fn(i32) -> R where R impl Future<i32>; // invalid syntax
另外,如果我想使用Fn
/ FnMut
/FnOnce
特征,我该怎么做?
解决方案
正确的语法是
type FA<R: Future<Output = i32>> = fn(i32) -> R;
但是,编译器警告说,类型别名的界限没有被强制执行,所以我们可以省略它:
type FA<R> = fn(i32) -> R;
然后我们可以像这样使用它(游乐场):
fn foo(f: FA<impl Future<Output = i32>>) {
let _ = f(7);
}
推荐阅读
- javascript - React Flow:如何删除元素?
- kotlin - 为什么 Kotlin 允许与文件夹结构不匹配的包结构?
- javascript - 为什么 JS 在 babel 脚本中找不到函数?
- salesforce - 单击删除按钮时,记录未在 tosca 中删除
- javascript - 过滤带有值数组的 json - JavaScript
- c# - 如何在 C# 中重现 powershell > az login 的结果?
- google-apps-script - 有没有办法让这个脚本运行得更快?
- qt - 在 Noetic 中创建 qt GUI 和 catkin_create_qt_pkg 的问题
- python - 最小值、最小日期、最小时间
- php - 带有复选框选择的数组中的多个输入值