DevSight

Rust Generics, Lifetimes

Rust에서 제너릭 데이터 타입 사용법을 간단하게 살펴보고 또한 Rust에서 모든 참조는 Lifetime을 갖는 데 이 부분에 있어 다른 개발 언어와 약간 독특한 문법을 가지고 있어서 간단한 예제로 정리하였다.

어떠한 객체가 있고 이를 가리키는 참조가 있다면 객체가 삭제되었는데 참조가 여전히 존재하는 경우를 해결하는 방법이라고 생각하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 기본 참조 예제
fn main() {
    let mut var1 = 10;
    let mut var2 = 20;
    let mut var3 = 0;
    get_int_ref(&mut var1, &mut var2, &mut var3);
    println!("{} + {} = {}", var1, var2, var3);
}

fn get_int_ref(p1: &mut i32, p2: &mut i32, p3: &mut i32) {
    *p1 = *p1 + 1;
    *p2 = *p2 - 1;
    *p3 = *p1 + *p2;
}
Lifetime 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
fn main() {
    let mut var1 = 10;
    let mut var2 = 20;
    let result = get_int_ref(&mut var1, &mut var2);
    println!("{}", result);
}

fn get_int_ref<'a>(p1: &'a i32, p2: &'a i32) -> &'a i32 {
    if p1 > p2 {
        return p1;
    } else {
        return p2;
    }
}
Read More ···