reqwestのドキュメントから例を複製しようとしています。次に例を示します。
let body = reqwest::get("https://www.rust-lang.org")?
.text()?;
私が追加した後reqwest = "0.10.10"
、ファイルCargo.tomlで行を、私は私の中で次のコードを追加しmain.rs
たファイル:
extern crate reqwest;
fn main() {
let body = reqwest::get("https://www.rust-lang.org")?.text()?;
println!("body = {:?}", body);
}
このコードはコンパイルされず、次のエラーが返されます。
cannot use the `?` operator in a function that returns `()`
私のコードはほとんどipsislitterisのドキュメントコードであるため、この動作には少し驚いています。
これは?
Responseオブジェクトでのみ機能すると思うので、get
メソッドが返すオブジェクトを確認しました。
extern crate reqwest;
fn print_type_of<T>(_: &T) {
println!("{}", std::any::type_name::<T>())
}
fn main() {
let body = reqwest::get("https://www.rust-lang.org");
print_type_of(&body);
}
出力:
core::future::from_generator::GenFuture<reqwest::get<&str>::{{closure}}
つまり、ドキュメントのように、代わりにResponseオブジェクトを取得しないのはなぜですか?
ここであなたをつまずかせる2つの別々の問題があります。
リンクしたドキュメントはreqwest
バージョン用ですが、バージョン0.9.18
をインストールしました0.10.10
。あなたが見れば用ドキュメント0.10.10
、あなたがISを使用するスニペットていることがわかります
let body = reqwest::get("https://www.rust-lang.org")
.await?
.text()
.await?;
println!("body = {:?}", body);
またはあなたの場合、非同期ランタイムを持つことについて言及していないので、blocking
ドキュメント
let body = reqwest::blocking::get("https://www.rust-lang.org")?
.text()?;
println!("body = {:?}", body);
これを使おうとすると、それでも得られることに注意してください
?
を返す関数で演算子を使用することはできません()
のmain
ように戻り値の型を設定する必要があります
fn main() -> Result<(), reqwest::Error> {
なぜ試すのか!()と?を参照してください。OptionまたはResultを返さない関数で使用するとコンパイルされませんか?詳細については。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加