在指定外部类型时推断内部类型

Infer inner types while specifying outer type

我有一个异步函数调用另一个异步函数,这个异步函数又调用另一个异步函数...等等

pub async fn collect_data(&mut self, arg: i32) {
    let futures: Vec<T> = self
        .sections
        .iter_mut()
        .map(|section| section.get_data(arg))
        .collect();
    join!(join_all(futures));
}

问题是指定 Vec<T>;我不知道是什么(如果可以避免的话,我真的不想显式输入它,因为函数参数可能会改变)。我也无法让编译器推断类型,因为它无法弄清楚它需要将 collect() 收集到 join_all() 的 Vec 中。但是,此代码 确实 编译:

pub async fn collect_data(&mut self, arg: i32) {
    let mut futures = Vec::new();
    for sect in self.sections.iter_mut() {
        futures.push(sect.get_data(arg));
    }
    join!(join_all(futures));
}

有没有办法让它用地图编译而不是创建这个可变向量?也许通过仅指定 Vec 同时仍然具有从地图的 return 值推断 T 的函数?或者其他我不知道的方式。

是的。要部分推断类型,请对希望编译器推断的部分使用 _

let futures: Vec<_> = self
    .sections
    .iter_mut()
    .map(|section| section.get_data(arg))
    .collect();