본문 바로가기
Language/Rust

패턴매칭

by y.j 2021. 10. 8.
728x90

콘솔에서 입력 받기

입출력 기능 : std::io모듈을 통해 처리된다.
세상에서 가장 안전한 언어 답게
ok() // 정당하게
except() // 함수가 정확하게 작동하지 않았을 때
추가하여 사용해줘야만 한다.

use std::io;

fn main () {
    println!("What's your name. noble warrior?");
    let mut buf = String::new();
    io::stdin().read_line(&mut buf)
        .ok()
        .expect("Failed to read ljine");
    println!("{}, that's a mighty name indeed!", buf.trim());

    let input_num: Result<u32, _> = buf.trim().parse();
    println!("Unwrap found {}", input_num.unwrap());
}

match사용방법

match를 통해 enum Result의 값을 사용할 수 있다.
아래에 코드를 보면 숫자가 내려오면 input에 숫자가 들어가면 Matched로 나오지만
String으로 들어가면 No Matched가 나온다.

use std::io;

fn main () {
    println!("What's your name. noble warrior?");
    let mut buf = String::new();
    io::stdin().read_line(&mut buf)
        .ok()
        .expect("Failed to read ljine");
    println!("{}, that's a mighty name indeed!", buf.trim());

    let input_num: Result<u32, _> = buf.trim().parse();
    // println!("Unwrap found {}", input_num.unwrap());

    // match input_num {
    //     Ok(num) => println!("{}", num),
    //     Err(ex) => println!("Please input an integer number! {}", ex)
    // };

    let num = match input_num {
        Ok(num) => num,
        Err(_) => 0
    };


    if let Ok(val) = input_num {
        println!("Matched {:?}!", val);
    }
    else {
        println!("No match");
    }
}

고려해야할 사항
아래의 코드는 2가지 변수에 대해서 고려되어 있지만, 이외의 값이 들어올 경우를 대비해서 _ 값도 항상 같이 정의해 놓자.

fn main () {
    let magician = "Gandalf";
    match magician {
        "Gandalf" => println!("A good magician"),
        "Sauron" => println!("A magician turned bad"),
        _ => println!("No magician turned up!")     // Gandalf, Sauron이외의 값이 들어올 수도 있다.
    };
}

여러가지 패턴
fn main () {
let magician = "Gandalf";
match magician {
"Gandalf" => println!("A good magician"),
"Sauron" => println!("A magician turned bad"),
_ => println!("No magician turned up!")
};

let magical_number:i32 = 42;
match magical_number {
    1 => println!("Unity"),
    2 | 3 | 5 | 7 | 11 => println!("Ok, these are primes"),
    40..=42 => println!("It is contained in this range"),    // 40..42는 패턴이 아니다. 40~42까지 범위를 가르킴
    _ => println!("No magic at all!")
};

}

728x90

'Language > Rust' 카테고리의 다른 글

일반화된 자료구조와 함수  (0) 2021.10.10
고차원 함수와 매개변수화를 통한 코드 일반화  (0) 2021.10.09
데이터 구조화  (0) 2021.10.06
함수와 제어문  (0) 2021.10.06
변수  (0) 2021.10.04

댓글