はじめに
NO IMAGEThe Rust Programming Language 日本語版 - The Rust Programming Language 日本語版
- を読んでいる
前回の振り返り
今日読む場所
- エラー処理の続き
メモ
use std::fs::File;
use std::io::ErrorKind;
fn main() {
let f = File::open("hello.txt");
let f = match f {
Ok(file) => file,
Err(ref error) if error.kind() == ErrorKind::NotFound => {
match File::create("hello.txt") {
Ok(fc) => fc,
Err(e) => {
panic!(
//ファイルを作成しようとしましたが、問題がありました
"Tried to create file but there was a problem: {:?}",
e
)
},
}
},
Err(error) => {
panic!(
"There was a problem opening the file: {:?}",
error
)
},
};
}
- はいはい、なんとなくわかる
このfcって何を返してるんだ?
if error.kind() == ErrorKind::Notfoundという条件式は、マッチガードと呼ばれます: アームのパターンをさらに洗練するmatchアーム上のおまけの条件式です。
この条件式は、 そのアームのコードが実行されるには真でなければいけないのです; そうでなければ、 パターンマッチングは継続し、matchの次のアームを考慮します。
- あそっか、Errが2個あるもんな
具体的には、標準ライブラリの std::fs::File 型のインスタンス が返ってきます。
-
fc聞いた、無難に標準ライブラリを知らなかっただけだな、理解
-
unwrapきた
- expectはError文を指定させてくれるのね
- unwrapはなるほどって感じ
- これも、enumの網羅性を損う実装って感じだ
_を見た時と感覚が似ている
-
エラーを委譲、ふむ
- Javaのthrowみたいやん
- そんなことない!!!、
throwはExceptionの型が知らないところから生えるけどこれはResult型しか返してない - かーーー天才か
まとめ
- やはりRustのenumはOptionもResultもつかさどっている神
- Javaの失敗を言い感じの処理にしている気がして理解が進むくん
- 思っていたより無駄ではなかった
- unwrap使いすぎちゃだめっていうのは読んでわかった
- 次はここ読む