gpt4 book ai didi

rust - 无法调用返回结果的函数:找到不透明类型 impl std::future::Future

转载 作者:行者123 更新时间:2023-12-03 11:28:13 25 4
gpt4 key购买 nike

我无法从 Result 返回函数的结果.每个教程只展示如何使用 Result,而不展示如何从中返回值。

fn main(){
let mut a: Vec<String> = Vec::new();
a = gottem();
println!("{}", a.len().to_string());
//a.push(x.to_string()
}
async fn gottem() -> Result<Vec<String>, reqwest::Error> {
let mut a: Vec<String> = Vec::new();
let res = reqwest::get("https://www.rust-lang.org/en-US/")
.await?
.text()
.await?;
Document::from(res.as_str())
.find(Name("a"))
.filter_map(|n| n.attr("href"))
.for_each(|x| println!("{}", x));
Ok(a)
}
我收到以下错误:
error[E0308]: mismatched types
--> src/main.rs:13:9
|
13 | a = gottem();
| ^^^^^^^^ expected struct `std::vec::Vec`, found opaque type
...
18 | async fn gottem() -> Result<Vec<String>, reqwest::Error> {
| ----------------------------------- the `Output` of this `async fn`'s found opaque type
|
= note: expected struct `std::vec::Vec<std::string::String>`
found opaque type `impl std::future::Future`

最佳答案

  • 您的函数没有返回 Result ,它返回一个 Future<Result> (因为它是一个异步函数),you need to feed it into an executor (e.g. block_on )为了运行它;或者,使用 reqwest::blocking 因为如果你不关心异步位会更容易
  • 一旦执行,您的函数将返回 Result但你试图把它放入 Vec ,那不行

  • 无关,但是:
    println!("{}", a.len().to_string());
    {}本质上是一个 to_string在内部, to_string调用没有用。

    关于rust - 无法调用返回结果的函数:找到不透明类型 impl std::future::Future,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62655615/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com