Rust でコマンドライン引数を数値として受け取る
コード
use std::env;
use std::num::ParseIntError;
fn main() {
let args = env::args()
.skip(1)
.map(|str| str.parse())
.collect::<Result<Vec<i32>, ParseIntError>>();
let args = match args {
Ok(list) => list,
Err(_) => {
eprintln!("Input Numbers");
process::exit(1);
}
};
println!("{:?}", args);
}
説明
env::args() でコマンドライン引数を取得できます。String のイテレータです。
一つ目にプログラム名が入ってるので skip(1) します。
map でそれぞれの値を変換します。
何に変換するかは collect で指定してます。
失敗した場合は、ParseIntError です。
##参考
https://doc.rust-jp.rs/book-ja/ch12-01-accepting-command-line-arguments.html
https://doc.rust-lang.org/stable/std/string/struct.String.html#method.parse
https://doc.rust-lang.org/stable/std/str/trait.FromStr.html
https://doc.rust-lang.org/std/num/struct.ParseIntError.html