RUST勉強中、4/3の積み上げ

前回の続き。

コマンドラインで取得したファイルを読み出す処理、パラメータが無かったら標準入力から入力するコードです。

use clap::Parser;
use std::fs::File;
use std::io::{stdin, BufRead, BufReader};

#[derive(Parser, Debug)]
#[clap(
    name = "My RPM program",
    version = "1.0.0",
    author = "Your name",
    about = "Super awesome sample RPM calculator"
)]
struct Opts {
    #[clap(short, long)]
    verbose: bool,

    #[clap(name = "FILE")]
    formula_file: Option<String>,
}

fn main() {
    let opts = Opts::parse();

    if let Some(path) = opts.formula_file {
        // ファイルから読み出す
        let f = File::open(path).unwrap();
        let reader = BufReader::new(f);
        run(reader, opts.verbose);
    } else {
        // 標準入力から読み出す
        let stdin = stdin();
        let reader = stdin.lock();
        run(reader, opts.verbose);
    }
}

fn run<R: BufRead>(reader: R, verbose: bool) {
    for line in reader.lines() {
        let line = line.unwrap();
        println!("{}", line);
    }
}

Some()は変数がエラーを許容する書き方らしい。

つまりは、formula_fileに値があっても無くてもpathに挿入され、その値をif文で評価する、という作りになっている(と思う。)

unwrap()は関数の結果(Option<T>やResult<T>)からTの値を取り出す処理。

まぁ、これでも不完全の様なんだが、とりあえずここはテキストに従う。

「RUST勉強中、4/3の積み上げ」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください