Rust 什么';包含期货的Vec的完整类型签名是什么?

Rust 什么';包含期货的Vec的完整类型签名是什么?,rust,async-await,future,Rust,Async Await,Future,我正在从Java/C的背景中逐步了解Rust。到目前为止我很高兴。有一件事一直阻碍着我,那就是变量上的隐式类型签名。我知道编译器知道每个变量的类型,但如果我也知道的话,它通常会帮助我更好地理解:) 我目前正在使用CLion和Rust插件。它在Rust方面做得不错,但是“将表达式提取到变量”操作(我经常使用它来提醒自己表达式的类型)使用了Rust的隐式类型签名 例如,我真的很好奇Future向量的类型签名是什么,因为Future特性有一个类型参数,我以前从未见过写出来的类型参数。不幸的是,这本书也

我正在从Java/C的背景中逐步了解Rust。到目前为止我很高兴。有一件事一直阻碍着我,那就是变量上的隐式类型签名。我知道编译器知道每个变量的类型,但如果我也知道的话,它通常会帮助我更好地理解:)

我目前正在使用CLion和Rust插件。它在Rust方面做得不错,但是“将表达式提取到变量”操作(我经常使用它来提醒自己表达式的类型)使用了Rust的隐式类型签名

例如,我真的很好奇Future向量的类型签名是什么,因为Future特性有一个类型参数,我以前从未见过写出来的类型参数。不幸的是,这本书也没有现成的例子给我

let requests = endpoints.iter()
                        .map(|endpoint| client.get(format!("..{}..",..endpoint..)).send())
                        .collect();
我知道这是一个未来的向量,它将产生一个包含响应或错误的结果。我只是还不知道该怎么表达

let requests : Vec<Future<Output=Result<Response,reqwest::Error>>> = ...

error[E0277]: the size for values of type `dyn std::future::Future<Output = std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>>` cannot be known at compilation time

let请求:Vec=。。。
错误[E0277]:编译时无法知道'dyn std::future::future'类型的值的大小
let请求:Vec=。。。
错误[E0562]:`impl Trait`不允许在函数和固有方法返回类型之外
let请求:Vec=。。。
错误[E0107]:类型参数数量错误:应为0,找到1
let请求:Vec=。。。
错误[E0562]:`impl Trait`不允许在函数和固有方法返回类型之外
let请求:Vec=。。。
.map(框::新建)
.collect()
错误[E0277]:无法通过迭代器在“std::boxed::Box”类型的元素上生成“std::vec::vec”类型的集合`

@ÖmerErden差不多了。我发现没有单一的Future结构,Future的实现是在编译时生成的。这个答案不足以解释我需要做什么来收集未来。未来的各种匿名实现都有一个共同的特点,所以我应该能够收集它们。Vec似乎是错误的,因为它想要大小不同的内容(而且因为每个未来的内容都可能是不同大小的,所以这永远不会起作用)。是否有不需要调整大小的集合?实际上,它也在“请参阅”部分中链接,这里是链接:任何不需要调整大小的集合都必须在某种程度上使用间接寻址。考虑一下:您需要知道集合中每个元素的大小,以便能够在内存中进行布局。明确这些细节,这是rusts的优势之一。您希望使用间接寻址,因此需要使用某种类型的指针,最明显的选择是Box。
send()
方法返回
impl Future
,这是实现
Future
特性的任意具体类型。具体类型本身无法命名,因此可以添加的最佳类型注释是
Vec
。一旦稳定,您将能够进行第二次尝试。
let requests : Vec<impl Future<Output=Result<Response,reqwest::Error>>> = ...

error[E0562]: `impl Trait` not allowed outside of function and inherent method return types
let requests : Vec<Future<Result<Response,reqwest::Error>>> = ...

error[E0107]: wrong number of type arguments: expected 0, found 1
let requests : Vec<impl Future<Result<Response, reqwest::Error>>> = ...

error[E0562]: `impl Trait` not allowed outside of function and inherent method return types
let requests : Vec<Box<dyn Future<Output = Result<Response, reqwest::Error>>>> = ...
            .map(Box::new)
            .collect()

error[E0277]: a collection of type `std::vec::Vec<std::boxed::Box<dyn std::future::Future<Output = std::result::Result<reqwest::async_impl::response::Response, reqwest::error::Error>>>>` cannot be built from an iterator over elements of type `std::boxed::Box<impl std::future::Future>`