2025년 4월 10일 목요일

3-3강 - 라이프타임 지시자

 라이프타임(lifetime) 지시자란? 

변수를 대여할 때 대여 기간을 명시적으로 지시하기 위해 사용

라이프타임은 (`)를 사용해 정의

// 런타임 시점에 판단하여 빌림을 반환하는 케이스
fn longest(x: &str, y: &str) -> &str {
    if x.len() > y.len() {
        x
    } else {
        y
    }
}

fn main() {
    let s1 = String::from("Hello");
    let s2 = String::from("Rust");

    let result = longest(&s1, &s2);
    println!("{}와 {}중 더 긴 문자열은 '{}'", s1, s2, result);
}
x, y, 반환타입 모두 소멸시점이 명확히 드러나지 않아 컴파일 오류 발생
----------------------------------------------------------------------
// 런타임 시점에 판단하여 빌림을 반환하는 케이스
// 라이프타임 지시지 `를 사용하여 변수 대여 기간을 명시적으로 지정
// 라이프타임 지시자 `'a`는 'a라는 이름을 가진 라이프타임을 의미
// 'a는 어떤 라이프타임을 나타내는 것이 아니라,
// 'a라는 이름을 가진 라이프타임을 나타냄
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str { // 'a는 x와 y의 라이프타임을 나타냄
    if x.len() > y.len() {
        x
    } else {
        y
    }
}

fn main() {
    let s1 = String::from("Hello");
    let s2 = String::from("Rust");

    let result = longest(&s1, &s2);
    println!("{}와 {}중 더 긴 문자열은 '{}'", s1, s2, result);
}

댓글 없음:

댓글 쓰기