コマンドライン引数
https://doc.rust-jp.rs/book-ja/ch12-01-accepting-command-line-arguments.html
Rust では関数の引数としてではなくて、環境変数の一部としてコマンドライン引数を受け取る。
std::env モジュールの Args, ArgsOs として実装されている。
このため、main 関数以外でもいつでも同じコマンドライン引数を取得することができるようになっている。
(C/C++ などでは main 関数で渡されたものを自力でどこかに保存する必要があった。)
code:args.rs
fn main() {
let args = std::env::args();
println!("{:?}", args);
}
code:console
$ cargo run a b c
Args { inner: "target/debug/args", "a", "b", "c" }
先頭が実行ファイルのパスになっている点に注意。
取得されるのはイテレータになっている。
ループ処理で使う以外では使いにくいため、配列化するのがセオリーになっている。
code:argsarray.rs
fn main() {
let args: Vec<String> = std::env::args().collect();
println!("{:?}", args);
}
Vec<String> は書かないと怒られる。(型推論してくれていると思うが、出力側に書かせている)
code:console
"target/debug/args", "a", "b", "c"
args_os() というのもあるが、これはOSの文字コードで取得するもの。