目次

Rustの勉強[エラー編 その2]

(更新: )ぎじゅつ

はじめに

#

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型しか返してない
    • かーーー天才か

まとめ

#