Rust 의 바인딩과 구조 분해

Beginner

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

소개

이 실습에서는 Rust 에서의 바인딩 개념을 탐구합니다. 바인딩은 변수에 간접적으로 접근하고, 재바인딩 없이 변수를 분기하고 사용할 수 있도록 합니다. match 문에서 @ 기호는 값을 이름에 바인딩하는 데 사용됩니다. 값을 특정 범위에 바인딩하는 방법과 Option과 같은 enum 변형을 "구조 분해"하는 방법을 포함한 예제가 제공됩니다.

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

바인딩

변수에 간접적으로 접근하면 재바인딩 없이 변수를 분기하고 사용하는 것이 불가능합니다. match는 값을 이름에 바인딩하기 위해 @ 기호를 제공합니다.

// `u32` 를 반환하는 함수 `age`.
fn age() -> u32 {
    15
}

fn main() {
    println!("Tell me what type of person you are");

    match age() {
        0             => println!("제 생일을 아직 맞이하지 못했습니다"),
        // 1 ~ 12 를 직접 `match` 할 수 있지만, 그렇다면 아이의 나이는 얼마입니까?
        // 대신 1 ~ 12 의 시퀀스에 대해 `n` 에 바인딩합니다. 이제 나이를 보고할 수 있습니다.
        n @ 1  ..= 12 => println!("저는 {:?}살의 어린이입니다", n),
        n @ 13 ..= 19 => println!("저는 {:?}살의 청소년입니다", n),
        // 아무것도 바인딩되지 않음. 결과를 반환합니다.
        n             => println!("저는 {:?}살의 어른입니다", n),
    }
}

바인딩을 사용하여 Option과 같은 enum 변형을 "구조 분해"할 수도 있습니다.

fn some_number() -> Option<u32> {
    Some(42)
}

fn main() {
    match some_number() {
        // `Some` 변형을 받았습니다. 값이 42 와 같은지 확인합니다. 값은 `n` 에 바인딩됩니다.
        Some(n @ 42) => println!("답: {}!", n),
        // 다른 숫자를 일치시킵니다.
        Some(n)      => println!("흥미롭지 않습니다... {}", n),
        // 다른 모든 것 (`None` 변형) 을 일치시킵니다.
        _            => (),
    }
}

요약

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