使用https://docs.rs/reqwest/latest/reqwest/blocking/struct.ClientBuilder.html中的代码
use reqwest;
use std::time::Duration;
let client = reqwest::blocking::Client::builder()
.timeout(Duration::from_secs(10))
.build()?;
我的货物.toml
reqwest = { version = "0.11.13", features = ["blocking", "json"] }
但我得到错误:
error[E0277]: the `?` operator can only be used in a method that returns `Result` or `Option` (or another type that implements `FromResidual`)
--> src/main.rs:27:13
|
22 | / fn new(&self) {
23 | | //self.client = reqwest::blocking::Client::builder().build()?;
24 | |
25 | | let client = reqwest::blocking::Client::builder()
26 | | .timeout(Duration::from_secs(10))
27 | | .build()?;
| | ^ cannot use the `?` operator in a method that returns `()`
28 | | }
| |_____- this function should return `Result` or `Option` to accept `?`
|
= help: the trait `FromResidual<Result<Infallible, reqwest::Error>>` is not implemented for `()`
"有什么想法吗"
1条答案
按热度按时间xmq68pz91#
Rust中的
?
操作符接受一个Result<T, E>
值,如果是错误,则将其传播给调用者,否则将其展开。你可以想到
大致相当于
现在
build
在您的例子中 * 确实 * 返回Result
,但是您的包含new
的函数 * 不 * 返回,所以您试图从返回()
的函数返回一个错误。名为new
的函数可能应该构造一个对象,而不是返回()
,但这是另一个问题)所以要么让你的函数返回
Result<..., E>
,以得到与错误类型build
兼容的E
(“兼容”意味着“存在一个impl From<E> for E1
,从它的类型到你的类型”),要么用其他方法处理错误。如果您有可以返回的默认值,则可以使用
unwrap_or
或unwrap_or_else
执行此操作也可以使用
expect
显式死机。