首页 > 解决方案 > 在 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特征,我该怎么做?

标签: typesrust

解决方案


正确的语法是

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

推荐阅读