スーパー雑な 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
この記事が気に入ったらサポートをしてみませんか?