강제
더 긴 라이프타임은 평소에는 작동하지 않을 스코프 내에서도 작동하도록 더 짧은 라이프타임으로 강제 변환(coerced)될 수 있습니다. 이는 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!("곱은 {}입니다", multiply(&first, &second));
println!("{}은(는) 첫 번째입니다", choose_first(&first, &second));
};
}