Argument parsing
Matching (match
) có thể được sử dụng để phân tích cú pháp (parse) các tham số đơn giản (simple arguments)
use std::env; fn increase(number: i32) { println!("{}", number + 1); } fn decrease(number: i32) { println!("{}", number - 1); } fn help() { // Hiển thị thông báo hướng dẫn sử dụng: // Có 2 tính năng chính: // 1. Kiểm tra xem giá trị truyền vào có phải là number và là đáp án hay không, trong ví dụ là số 42 // 2. Tăng hoặc giảm giá trị truyền vào 1 đơn vị println!("usage: match_args <string> Kiểm tra xem giá trị truyền vào có đúng là đáp án hay không. match_args {{increase|decrease}} <integer> Tăng hoặc giảm giá trị truyền vào một đơn vị."); } fn main() { let args: Vec<String> = env::args().collect(); match args.len() { // Không có tham số nào được truyền vào 1 => { println!("Tên tôi là 'match_args'. Hãy thử truyền thêm các tham số vào câu lệnh!"); }, // Truyền vào 1 tham số đầu tiên 2 => { match args[1].parse() { Ok(42) => println!("Đáp án chính xác!"), _ => println!("Đây không phải đáp án."), } }, // 1 câu lệnh và 1 tham số được truyền vào 3 => { let cmd = &args[1]; let num = &args[2]; // Phân giải giá trị truyền vào -> check xem có phải number không let number: i32 = match num.parse() { Ok(n) => { n }, Err(_) => { eprintln!("Lỗi: Tham số truyền vào không phải là số nguyên (interger)"); help(); return; }, }; // Phân giải câu lệnh, kiểm tra tính đúng đắn match &cmd[..] { "increase" => increase(number), "decrease" => decrease(number), _ => { eprintln!("Lỗi: Câu lệnh không hợp lệ"); help(); }, } }, // Các trường hợp khác _ => { // Hiển thị thông báo hướng dẫn help(); } } }
$ ./match_args Rust
Đây không phải đáp án.
$ ./match_args 42
Đáp án chính xác!
$ ./match_args do something
Lỗi: Tham số truyền vào không phải là số nguyên (interger)
usage:
match_args <string>
Kiểm tra xem giá trị truyền vào có đúng là đáp án hay không.
match_args {increase|decrease} <integer>
Tăng hoặc giảm giá trị truyền vào một đơn vị.
$ ./match_args do 42
error: invalid command
usage:
match_args <string>
Kiểm tra xem giá trị truyền vào có đúng là đáp án hay không.
match_args {increase|decrease} <integer>
Tăng hoặc giảm giá trị truyền vào một đơn vị.
$ ./match_args increase 42
43