不能在返回`()`的函数中使用`?`运算符

时间:2019-10-14 09:20:05

标签: rust reqwest

我对rust还是很陌生,我想编写一个脚本来抓取页面,并从页面中提取所有带有标题的链接。我什至没有发出get请求。 :(

fn main() {
    println!("Started!");
    let body = reqwest::get("https://news.ycombinator.com")
    .await?
    .text()
    .await?;

    println!("body = {:?}", body);
}

我显然没有返回任何内容,但是我对语法感到困惑,有人可以解释吗?操作员,也可以帮助我解决此问题。

1 个答案:

答案 0 :(得分:2)

问号运算符只能在返回std::Result的函数中使用。粗略地说,您可以将x?理解为含义

match x {
    Err(e) => return Err(e),
    Ok(y) => y,
}

(请参阅文档here

await产生错误结果时,您想做什么?如果您不希望这种情况发生,那么可以安全地告诉Rust发生恐慌(即崩溃)。这是Result::unwrap的用途:

fn main() {
    println!("Started!");
    let body = reqwest::get("https://news.ycombinator.com")
        .await
        .unwrap()
        .text()
        .await
        .unwrap();

    println!("body = {:?}", body);
}