見出し画像

スーパー雑な Rust メモ : CSVを読んでそのまま返すだけのサンプルと ? 記法について

Rust の雑な勉強メモです。

CSVを読んでそのまま返すだけのサンプル

use std::error::Error;
use std::io;
use std::process;

fn main() {
    if let Err(err) = run() {
        println!("{}", err);
        process::exit(1);
    }
}

fn run() -> Result<(), Box<dyn Error>> {
    let mut rdr = csv::Reader::from_reader(io::stdin());
    let mut wtr = csv::Writer::from_writer(io::stdout());
    for result in rdr.records() {
        match result {
            Err(err) => return Err(From::from(err)),
            Ok(record) => {
                wtr.write_record(&record)?;
                /*
                if let Err(err) = wtr.write_record(&record) {
                    return Err(From::from(err));
                }
                */
            }
        }
    }
    wtr.flush()?;
    /*
    if let Err(err) = wtr.flush() {
        return Err(From::from(err));
    }
    */
    Ok(())
}

run 関数は Result 型を返すので ? 記法が使えるようになります。

wtr.write_record(&record)?;
wtr.flush()?;

の文末の ? のことね。
? 記法を使わないと、(最大で)その直下のコメントアウトしたような処理が必要です。
多分、この中間の冗長さの書き方や、他のヴァリエーションがいろいろありそうなので、それは今後学習していきます。

参考

SN

この記事が気に入ったらサポートをしてみませんか?