13.4.8 elision

몇 가지 생명주기 패턴들이 압도적으로 보편적이기에 대여 검사자는 암시적으로 그들을 추가하여 타이핑을 줄이고 가독성을 향상시킨다. 이렇게 암시적으로 추가하는 동작을 생략이라 부른다. 생략은 Rust에만 존재하는데 이유는 이들 패턴이 보편적이기 때문이다.

다음 코드는 몇 가지 생략에 대한 예제를 보여준다. 생략의 더 포괄적인 설명이 필요하면, 이 책의 lifetime elision를 살펴보자.

// `elided_input`과 `annotated_input`은 본질적으로 동일한 선언자를 갖는데
// 이유는 `elided_input`의 생명주기가 컴파일러에 의해 생략되었기 때문이다.
fn elided_input(x: &i32) {
    println!("`elided_input`: {}", x)
}

fn annotated_input<'a>(x: &'a i32) {
    println!("`annotated_input`: {}", x)
}

// 마찬가지로, `elided_pass`와 `annotated_pass`도 동일 선언인데 
// 왜냐하면 `elided_pass`에 암시적으로 생명주기가 추가되기 때문이다.
fn elided_pass(x: &i32) -> &i32 { x }

fn annotated_pass<'a>(x: &'a i32) -> &'a i32 { x }

fn main() {
    let x = 3;

    elided_input(&x);
    annotated_input(&x);

    println!("`elided_pass`: {}", elided_pass(&x));
    println!("`annotated_pass`: {}", annotated_pass(&x));
}

See also:

elision

results matching ""

    No results matching ""