いつもお世話になっております。
先日からRustに入門した初心者です。
現在エラーハンドリングについて学んでおり、
anyhowクレートを利用した処理に取り組んでいます。
テキストの中で以下のコードが紹介してあったのですが、
一部分からないところがあり、今回質問させて頂きました。
Q1:use anyhow::{Context, Result};について
ここではクレートanyhow内のContext、Resultという型を使うことを
宣言しているという認識で合っているでしょうか?
Q2:fn get_int_from_file()内のlet num_strの行では
with.contextメソッドを利用しています。
これはuseで宣言したanyhowクレートの中の
Result型にImplementされたメソッドですが、
コードの中でnum_strというオブジェクトを
Result型であると明示的に宣言をしていません。
これは恐らくRustの型推論が働いたのだと思われますが、
どういったの要因により、型が決まったのでしょうか?
以下のいずれかかと考えております。
- Result型に実装されたメソッドを利用しているので、Result型に定まった。
- 返り値でResult型を指定しており、関数get_int_from_fileの返り値となるのは
num_strであるので、Result型に定まった。
Rust
1use anyhow::{Context, Result}; 2 3fn get_int_from_file() -> Result<i32>{ 4 let path = "number.txt"; 5 6 let num_str = std::fs::read_to_string(path).with_context(|| format!("failed to read string {}", path))?; 7 8 println!("{}",type_of(num_str)); 9 10 num_str 11 .trim() 12 .parse::<i32>() 13 .map(|t| t * 2) 14 .context("failed to parse string") 15} 16 17fn main() { 18 match get_int_from_file(){ 19 Ok(x) => println!("{}", x), 20 Err(e) => println!("{:#?}", e) 21 } 22}
お忙しいところ大変恐縮ですが、ご教授頂けますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/08 06:15
2021/11/08 07:05
2021/11/08 22:58