这是因为
impl Future
是一个具体的独特类型
dyn Future
是一种抽象类型。
HashMap
应为抽象类型,因为它只能包含单个类型的实例。
如果我们可以将异步函数的返回类型装箱,我们将能够将这些未来添加到
.
CalcFn
type CalcFn = Box<dyn Fn(i32, i32) -> Pin<Box<dyn Future<Output = i32>>>>;
这样就可以做到:
let mut map: HashMap<&str, CalcFn> = Default::default();
map.insert("add", Box::new(|a, b| Box::pin(add(a, b))));
map.insert("sub", Box::new(|a, b| Box::pin(sub(a, b))));
println!("map size: {}", map.len());
//map.get("add").unwrap()(2, 3).await
这个
complete example
简化
Future
Item
类型,使用
i32
而不是
Result
. 请同时检查
full code for your case
.