Rust 생명주기 강제 변환 탐구

Beginner

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

소개

이 랩에서는 Rust 의 강제 변환 (coercion) 개념을 탐구합니다. 여기서 더 긴 생명주기 (lifetime) 는 특정 범위 내에서 기능을 활성화하기 위해 더 짧은 생명주기로 강제 변환될 수 있습니다. 이는 Rust 컴파일러에 의한 추론된 강제 변환을 통해 발생하거나, <'a: 'b, 'b>와 같은 구문을 사용하여 생명주기 차이를 선언함으로써 발생할 수 있습니다.

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

강제 변환 (Coercion)

더 긴 생명주기는 일반적으로 작동하지 않는 범위 내에서 작동하도록 더 짧은 생명주기로 강제 변환될 수 있습니다. 이는 Rust 컴파일러에 의한 추론된 강제 변환 형태로 나타나며, 생명주기 차이를 선언하는 형태로도 나타납니다.

// 여기서 Rust 는 가능한 가장 짧은 생명주기를 추론합니다.
// 그런 다음 두 참조는 해당 생명주기로 강제 변환됩니다.
fn multiply<'a>(first: &'a i32, second: &'a i32) -> i32 {
    first * second
}

// `<'a: 'b, 'b>`는 생명주기 `'a` 가 최소한 `'b` 만큼 길다는 의미로 읽습니다.
// 여기서 `&'a i32`를 입력받아 강제 변환의 결과로 `&'b i32`를 반환합니다.
fn choose_first<'a: 'b, 'b>(first: &'a i32, _: &'b i32) -> &'b i32 {
    first
}

fn main() {
    let first = 2; // 더 긴 생명주기

    {
        let second = 3; // 더 짧은 생명주기

        println!("The product is {}", multiply(&first, &second));
        println!("{} is the first", choose_first(&first, &second));
    };
}

요약

축하합니다! 강제 변환 (Coercion) 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 실력을 향상시킬 수 있습니다.