Выбрать главу

Аргументы командной строки могут быть доступны при помощи std::env::args, который возвращает итератор, который выдаёт String для каждого аргумента:

use std::env;

fn main() {

let args: Vec<String> = env::args().collect();

// Первый аргумент - путь, используемый для вызова программы.

println!("Мой путь {}.", args[0]);

// Оставшиеся аргументы - переданные в командной строке параметры.

// Вызов программы выглядит так:

// $ ./args arg1 arg2

println!("У меня {:?} аргумента: {:?}.", args.len() - 1, &args[1..]);

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

$ ./args 1 2 3

Мой путь ./args.

У меня 3 аргумента: ["1", "2", "3"].

В качестве альтернативы, существует несколько крейтов, которые предоставляют дополнительную функциональность при создании приложений командной сроки. Rust Cookbook показывает лучшие практики, как использовать один из самых популярных крейтов для аргументов командной строки, clap.

Сопоставление может быть использовано для разбора простых аргументов:

use std::env;

fn increase(number: i32) {

println!("{}", number + 1);

}

fn decrease(number: i32) {

println!("{}", number - 1);

}

fn help() {

println!("usage:

match_args <string>

Проверяет является ли данная строка ответом.

match_args {{increase|decrease}} <integer>

Увеличивает или уменьшает число на 1.");

}

fn main() {

let args: Vec<String> = env::args().collect();

match args.len() {

// аргументы не переданы

1 => {

println!("Я - 'match_args'. Попробуйте передать аргументы!");

},

// передан один аргумент

2 => {

match args[1].parse() {

Ok(42) => println!("Это ответ!"),

_ => println!("Это не ответ."),

}

},

// переданы одна команда и один аргумент

3 => {

let cmd = &args[1];

let num = &args[2];

// parse the number

let number: i32 = match num.parse() {

Ok(n) => {

n

},

Err(_) => {

eprintln!("ошибка: второй аргумент не является числом");

help();

return;

},

};

// парсим команду

match &cmd[..] {

"increase" => increase(number),

"decrease" => decrease(number),

_ => {

eprintln!("ошибка: неизвестная команда");

help();

},

}

},

// все остальные случаи

_ => {

// показываем сообщение с помощью

help();

}

}

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

$ ./match_args Rust

Это не ответ.

$ ./match_args 42

Это ответ!

$ ./match_args do something

ошибка: второй аргумент не является числом

usage:

match_args <string>

Проверяет является ли данная строка ответом.

match_args {increase|decrease} <integer>

Увеличивает или уменьшает число на 1.

$ ./match_args do 42

ошибка: неизвестная команда

usage:

match_args <string>

Проверяет является ли данная строка ответом.