13.4.6 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)); }; }