无法调用 returns 结果的函数:找到不透明类型 impl std::future::Future
Cannot call a function that returns Result: found opaque type impl std::future::Future
我不能 return 来自 Result
的函数的结果。每个教程只展示如何使用结果,而不是如何 return 从中获取值。
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`
- 你的函数不是 return
Result
,它 return 是 Future<Result>
(因为它是一个异步函数),you need to feed it into an executor (e.g. block_on
) in order to run it; alternatively, use reqwest::blocking
因为它更简单如果你不关心异步位
- 执行后,你的函数是 returning a
Result
但你试图将它放入 Vec
,这是行不通的
无关,但是:
println!("{}", a.len().to_string());
{}
本质上是在内部执行 to_string
,to_string
调用没有用。
我不能 return 来自 Result
的函数的结果。每个教程只展示如何使用结果,而不是如何 return 从中获取值。
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`
- 你的函数不是 return
Result
,它 return 是Future<Result>
(因为它是一个异步函数),you need to feed it into an executor (e.g.block_on
) in order to run it; alternatively, usereqwest::blocking
因为它更简单如果你不关心异步位 - 执行后,你的函数是 returning a
Result
但你试图将它放入Vec
,这是行不通的
无关,但是:
println!("{}", a.len().to_string());
{}
本质上是在内部执行 to_string
,to_string
调用没有用。