명령줄 인수

10678 단어 beginnersrust
이미 Accepting command line argumentsStruct Args 을 읽었다면 간단한 계산기를 예로 들어 명령줄 인수가 어떻게 작동하는지 살펴보겠습니다.

표준 라이브러리 추가

use std::env::{args, Args};


주요 코드는 다음과 같습니다.

fn main() {
    let mut arguments: Args = args();
    let first_argument = arguments.nth(1).unwrap();
    let operator = arguments.nth(0).unwrap().chars().next().unwrap();
    let second_argument = arguments.nth(0).unwrap();

    let first_number: f64 = first_argument.parse().unwrap();
    let second_number = second_argument.parse::<f64>().unwrap();

    let result = operate(operator, first_number, second_number);
    println!("{} {} {} = {}", first_number, operator, second_number, result);
}


함수 operator()는 'char' 유형의 연산자와 일치합니다.

fn operate(operator: char, first_number: f64, second_number: f64) -> f64{
    match operator {
        '+' => first_number + second_number,
        '-' => first_number - second_number,
        '/' => first_number / second_number,
        '*' | 'x' | 'X' => first_number * second_number,
        => 0.0,
    }
}


예를 들어 «숫자 연산자 번호» 인수를 사용하여 실행합니다.

cargo run 1 + 2


대답은 다음과 같습니다.

1 + 2 = 3


인수는 다음과 같습니다.

{ inner: ["target/debug/calculator", "1", "+", "2"] }


첫 번째 요소는 실행 파일의 경로입니다.

인덱스로 명령줄 인수에 액세스

일부 인수가 사용되는 즉시 모든 이전 인수가 삭제됩니다.

let first_argument = arguments.nth(1).unwrap();


인수:

{ inner: ["+", "2"] }


따라서 우리는 0번째 인수를 취해야 합니다.

let operator = arguments.nth(0).unwrap().chars().next().unwrap();


인수:

{ inner: ["2"] }


그리고 다시 우리는 0번째 인수를 취해야 합니다.

let second_argument = arguments.nth(0).unwrap();


인수:

Args { inner: [] }


그래서

args.nth(1) = 1
args.nth(0) = +
args.nth(0) = 2


테스트해 봅시다:

#[test]
fn add() {
    assert_eq!(3.0, operate('+', 1.0, 2.0) );
}
#[test]
fn substruct() {
    assert_eq!(3.0, operate('-', 5.0, 2.0) );
}
#[test]
fn multiply() {
    assert_eq!(4.0, operate('*', 2.0, 2.0) );
    assert_eq!(4.0, operate('x', 2.0, 2.0) );
    assert_eq!(4.0, operate('X', 2.0, 2.0) );
}
#[test]
fn divide() {
    assert_eq!(3.0, operate('/', 6.0, 2.0) );
}
#[test]
fn error() {
    assert_ne!(2.0, operate('u', 4.0, 2.0) );
}

좋은 웹페이지 즐겨찾기