Rust 명령줄 인수 분석

Beginner

This tutorial is from open-source community. Access the source code

소개

이 실습에서는 Rust 에서 패턴 매칭을 사용하여 인수 분석의 예제를 보여줍니다. 이 프로그램은 명령줄 인수를 받아 전달된 인수의 개수와 유형에 따라 다른 작업을 수행합니다. 인수가 전달되지 않으면 메시지를 출력합니다. 하나의 인수가 전달되고 정수 42 로 해석될 수 있으면 "This is the answer!"를 출력합니다. 명령과 정수 인수가 전달되면 정수에 대한 증가 또는 감소 작업을 수행합니다. 다른 개수의 인수가 전달되면 프로그램의 올바른 사용법을 설명하는 도움말 메시지를 표시합니다.

참고: 실습에서 파일 이름을 지정하지 않으면 원하는 파일 이름을 사용할 수 있습니다. 예를 들어 main.rs를 사용하고 rustc main.rs && ./main으로 컴파일 및 실행할 수 있습니다.

인수 분석

매칭을 사용하여 간단한 인수를 분석할 수 있습니다.

use std::env;

fn increase(number: i32) {
    println!("{}", number + 1);
}

fn decrease(number: i32) {
    println!("{}", number - 1);
}

fn help() {
    println!("usage:
match_args <문자열>
    주어진 문자열이 답인지 확인합니다.
match_args {{증가 | 감소}} <정수>
    주어진 정수를 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];
            // 숫자를 구문 분석
            let number: i32 = match num.parse() {
                Ok(n) => {
                    n
                },
                Err(_) => {
                    eprintln!("오류: 두 번째 인수가 정수가 아닙니다.");
                    help();
                    return;
                },
            };
            // 명령을 구문 분석
            match &cmd[..] {
                "increase" => increase(number),
                "decrease" => decrease(number),
                _ => {
                    eprintln!("오류: 잘못된 명령입니다.");
                    help();
                },
            }
        },
        // 다른 모든 경우
        _ => {
            // 도움말 메시지 표시
            help();
        }
    }
}
$ ./match_args Rust
정답이 아닙니다.
$ ./match_args 42
정답입니다!
$ ./match_args do something
오류: 두 번째 인수가 정수가 아닙니다.
usage:
match_args <문자열>
    주어진 문자열이 답인지 확인합니다.
match_args {증가 | 감소} <정수>
    주어진 정수를 1 씩 증가 또는 감소시킵니다.
$ ./match_args do 42
오류: 잘못된 명령입니다.
usage:
match_args <문자열>
    주어진 문자열이 답인지 확인합니다.
match_args {증가 | 감소} <정수>
    주어진 정수를 1 씩 증가 또는 감소시킵니다.
$ ./match_args increase 42
43

요약

축하합니다! 인수 분석 실습을 완료했습니다. LabEx 에서 더 많은 실습을 통해 기술을 향상시킬 수 있습니다.